【发布时间】:2017-12-06 17:42:20
【问题描述】:
我有一个具有如下设置的数组:
["1", "open_order", "form", "county", "San Diego", "title_officer", "Peter", "0"]
["2", "open_order", "form", "county", "San Diego", "branch", "MV", "0"]
["3", "open_order", "form", "county", "San Diego", "title_officer", "Tom", "0"]
["4", "open_order", "form", "county", "San Bernardino", "branch", "RV", "0"]
它会像这样创建一个数组:
$(function() {
var o = [];
var i = 0;
var predata = $('#preferences').text();
var data = JSON.parse(predata);
for(i = 0; i < data.length; i++) {
var dataObject = {};
dataObject['preferenceId'] = data[i][0];
dataObject['pageName'] = data[i][1];
dataObject['preferenceType'] = data[i][2];
dataObject['baseField'] = data[i][3];
dataObject['baseValue'] = data[i][4];
dataObject['targetField'] = data[i][5];
dataObject['targetValue'] = data[i][6];
dataObject['conditionalId'] = data[i][7];
o[i] = dataObject;
}
$.each(o, function() {
console.log();
var baseField = $('#' + o.baseField);
var baseValue = o.baseValue;
var targetField = $('#' + o.targetField);
var targetValue = o.targetValue;
baseField.change(function() {
if (baseField.val() == baseValue) {
targetField.val(targetValue);
}
});
});
});
上面,我尝试为每次 baseField.val() 匹配 baseValue 时创建一个更改事件。从这里开始,这将更新其他选择框/输入字段。
但是,change() 仅适用于列表中的最后一个对象。
我在这里做错了什么?
【问题讨论】:
-
别想了,尝试在 for 循环中将
var放在i = 0之前:` for(var i = 0; i -
我相信问题的一部分是所有的 baseFields 都是
country所以你很可能在页面上的单个国家元素上创建了重复的绑定。我也很困惑为什么当o是一个数组时你在做Object.keys(o).length而你可以只做o.length或将它从一个for each 更改为一个o.forEach() -
否定:/ 不过谢谢! @ChrisHappy
-
@Taplar sooo...有什么建议吗?
-
您需要将
index, element或两个以您喜欢的名称命名的变量传递给每个函数。然后引用传入参数的那个元素。$.each()api 文档应该显示这方面的示例。
标签: jquery forms object for-loop onchange