私はコード内でグローバル変数の使用を避けようとしていますので、$(document).ready
の中でそれらを宣言し、それらを$(document).ready
の外の関数にパラメータとして渡し、それらを更新して戻ります$(document).ready
の内部の変数を操作するそれらの関数から更新された値。
もう1つの方法は変数を格納するためにhidden
入力フィールドを使用することですが、それは悪い習慣であるとも聞きました。
グローバル変数を使用するかどうか、私が現在やっているやり方、あるいは隠れた入力フィールドを使うのかどうか疑問に思っていますか?
以下は私が達成しようとしているものの簡単な例です。変数バリデーションは、私が使用して更新できるようにしたい変数です。
$(document).ready(function(){
var validations = [];
$('#inp').keypress(function(e){
if(e.which == 13){
e.preventDefault();
scanValidation(validations, function(valid){
validations = valid;
});
}
});
}):
function scanValidation(valid, cb){
var scanval = $('#inp').val();
if(valid.includes(scanval)){
//display error
}
else{
var validarr = valid.slice();
validarr.push(scanval);
var myData=JSON.stringify({ "name":"user1", "validations":validarr});
//Makes an ajax call to see if the sent array validarr is a valid request
apiCall(myData,'scanValidation',function(decoded) {
if (decoded.Status!="ERROR") {
valid = validarr;
}
else {
//display error
}
return(cb(valid));
});
}
}
有効なスコープの変数を使用します。範囲は要件に依存します。あなたは、あなたの文書の中にたくさんの(読んだ:あまりにも多くの)コードを用意しているように思えるので、javascriptの名前空間を調べたいかもしれません。 –
クロージャー外の関数に渡すことで何をしているのかの例を見せてもらえますか?変数をスコープしようとしているが、正しいことを確かめるためには正しい方法を取っているように思えます。 – Taplar
サイドノートでは、隠し変数はDOMにデータを格納する唯一の方法ではありません。 data- *フィールドを使用して、論理エンティティの関連情報をDOMに格納することもできます。 jqueryのdata()を使用してこのように情報を格納すると、その要素にアクセスできるすべてのメソッドからアクセスできます。また、要素に関連付けられているため、真にグローバルではありません。 – Taplar