-1

我有一个带有表单的 php 站点,我在该表单上通过 php 输出预选值。在提交表单时,我想检查哪些值已更改,然后通过 javascript 提交这些值。

这些是我从 php.ini 传递过来的预选值。保持关联数组结构很重要。

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 回答