-1

事前に選択した値をphp経由で出力するフォームを備えたphpサイトがあります。フォームの送信時に、どの値が変更されたかを確認し、JavaScriptを介して送信します。

これらは、phpから渡した事前に選択された値です。連想配列構造を維持することが重要です。

var pbData = jQuery.parseJSON("{
"GameMode":"DEATHMATCH",
"Current Map":"VEGAS JUNKYARD",
"Current Missions":["VEGAS JUNKYARD","VILLA","PRESIDIO","KILL HOUSE","MURDERTOWN","CQB TRAINING","STREETS","THREE KINGDOMS CASINO","IMPORT\/EXPORT;"],
"RoundDuration":"3 minutes"}");

コードでエラーをマークしました。

<script>
function displayVars(){
var form = document.getElementById('settings');
var elems = form.elements;
var txt = "";
for (var index = 0; index < elems.length; index++){
    var selIndex = elems[index].selectedIndex;
    if (typeof selIndex !== "undefined"){
        //the Index Name in the json-object and the name of the form-field are the same 
        var idxName = elems[index].name;
//HERE is the problem. I want to access the subobject via a variablename, so i can iterate through it, but that doesnt work.
        console.log ("pbData default = "+pbData.idxName); //always undefined
        if (elems[index].value !== pbData.idx_name){
            //building a POST-Url
            txt = txt + elems[index].name + "=" + elems[index].options[selIndex].value+"&";
        }
    }
}
console.log (txt);
return false;
}
</script>

これは、jQueryでも別の方法で実行できることを私は知っています。私の場合、どのような場合でもphp変数として事前に選択された値があるので、このように簡単だと思います。オブジェクト名を含む変数を介してサブオブジェクトを反復処理する方法を本当に知りたいです。

4

2 に答える 2

1

Javascriptでは、オブジェクトまたは配列を初期値で保持し、変更された値のみを投稿できます。

しかし実際には、私は似たようなことをしますが、PHPで行います。セッションで元の値を保持し、投稿された値をそれらの初期値と比較して、何が変更されたかを確認できます。そうすれば、Javascriptに依存することはありません。Javascriptを無効にするだけでなく、高速ユーザーは理論的にはJavascriptが実行される前にフォームを投稿できます。このチェックをPHPに移動すると、そのリスクがなくなります。

于 2012-10-28T12:02:31.303 に答える
1

これは、(JSON)オブジェクトのプロパティにアクセスしようとしているためです。検討

var o1 = {idxName: true},
    o2 = {foo : 'bar'},
    idxName = 'foo';

o1.idxName;  // true
o2.idxName;  // undefined
o2[idxName]; // 'bar'

を介してプロパティにアクセスする必要がありますpbData[idxName]


さらに、JSON文字列の引用符をエスケープしていないため、次のように改行をエスケープする必要があります。

var pbData = jQuery.parseJSON("{\
\"GameMode\":\"DEATHMATCH\",\
\"Current Map\":\"VEGAS JUNKYARD\",\
\"Current Missions\":[\"VEGAS JUNKYARD\",\"VILLA\",\"PRESIDIO\",\"KILL HOUSE\",\"MURDERTOWN\",\"CQB TRAINING\",\"STREETS\",\"THREE KINGDOMS CASINO\",\"IMPORT\/EXPORT;\"],\
\"RoundDuration\":\"3 minutes\"}");
于 2012-10-28T12:03:33.493 に答える