dポイントプレゼントキャンペーン実施中!

以下のJavaScriptでパスワードの初回入力時(newvalue値がundefindの時(空欄の時)、指定したキーは存在しませんとのメッセージを出し再入力を求め、正しい時はリンク先に移動させたいのですが、全てリンク先に移動し上手く行きません。
どのように修正したら良いのでしょうか?

<HTML>
<head>
<meta charset="utf-8"/>
</head>
<body>
<div id ="login">
<h3>1パスワード入力</h3>
パスワード:<input type="number" id="newvalue" />
<input type="button" value="ログイン" onclick="setValue()"/>
</div>
<h3>3処理結果</h3>
<div id="result"/>
</body>
<script>
var db;
var indexedDB = window.indexedDB || window.mozIndexedDB || window.msIndexedDB;
if (indexedDB) {
var openRequest = indexedDB.open("mydb", 1.0);
openRequest.onupgradeneeded = function(event) {
db = event.target.result;
var store = db.createObjectStore("mystore", { keyPath: "mykey"});
store.createIndex("myvalueIndex", "myvalue", "myvalue2");
}
openRequest.onsuccess = function(event) {
db = event.target.result;
}
} else {
window.alert("このブラウザではIndexed DataBase API は使えません。");
}

function setValue(event) {
var key = "login";
var value = Number(document.getElementById("newvalue").value);
var transaction = db.transaction(["mystore"], "readwrite");
var store = transaction.objectStore("mystore");
var result = document.getElementById("result");
result.innerHTML = "";
if (value === undefined) {
result.innerHTML = "指定したキーは存在しません。";
} else {

var request = store.put({ mykey: key, myvalue: value});
request.onsuccess = function (event) {
key = "";
document.getElementById("newvalue").value = "";
location.href = "http://www.yahoo.co.jp";
}
}
}
</body>
</HTML>

A 回答 (3件)

>newvalue値がundefindの時



ちょっと意味がわからないです
id=newvalueの要素がなければ、オブジェクトはundefinedになりますが
「値」がundefinedになることはありませんよ
document.getElementById("newvalue") == undefined
document.querySelectorAll("#newvalue").length == 0
などでチェックして下さい

存在しないオブジェクトに対して.valueを参照することはできません。
    • good
    • 0

1. <script>タグの終わりを記述すること </script>


→閉じないと、</body>や</html>もJavaScriptとして認識されるのでエラーになる
2. パスワード入力ならば<input type="number">ではなくtype="password"にする
3. type=numberは数値かNaNしか返さない。
  type=passwordにすると入力された値or"undefined"を返す。

スクリプトの何処に問題があるか以前に、上記の通りhtmlを改善しないと話が進まない。

タメ口でゴメン。
    • good
    • 0

こんにちは



indexedDBを使ったことはありませんが、ご質問の内容は
>if (value === undefined) {
> result.innerHTML = "指定したキーは存在しません。";
>} else {
の判定のことだと想像しました。

変数vakueの内容を見てみると、
>var value = Number(document.getElementById("newvalue").value);
とありますが、Numberが返すのは数値かNaN値のはずなので、undefinedにはなり得ないのではないでしょうか?
その結果、制御は必ず else 側に流れるものと思います。

入力値をチェックしたいのであれば、まず、
>document.getElementById("newvalue").value
の値をチェックした方が良いのでは?


ついでながら、その他の点。
「パスワード」と表示しながらinput要素はtype=numberとなっています。実際の使い方はわかりませんけれど、ミスディレクションになっているように感じます。
<div id="result"/>は、きちんと閉じタグが必要かと。
<script>の閉じタグも見当たりません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!