【发布时间】:2012-09-05 13:58:33
【问题描述】:
我编写了一个程序,其中包含用户与之交互的表单。因为有很多事件绑定到不同的按钮,所以我编写了一个循环来解析一些包含表单输入信息的 JS。以下是一些示例数据:
var value = 0,
forms = {
place_controls : {
attrs : {
'class' : 'place-form'
},
input : {
place_x : {
attrs : {
type : 'text',
},
events : {
change : function () {
value = 10;
}
}
},
place_y : {
attrs : {
type : 'text',
},
events : {
change : function () {
value = 50
}
}
}
}
}
}
然后通过以下方式解析数据:
$.each(forms, function (form_index, form) {
var $form_markup = $('<form>').attr(form.attrs);
// Next: loop through each input element of the form we've reached
$.each(form.input, function (element_index, element) {
var $elem = $('<input>').attr(element.attrs);
$elem.appendTo($form_markup);
if (element.events !== undefined) {
$.each(element.events, function (event_index, event) {
$elem.bind(event_index, event);
//$form_markup.on(event_index, $elem, event);
});
}
});
$form_markup.appendTo($form_goes_here);
});
如您所见,我目前使用的是.bind(),但我想使用.on()。不幸的是,当我这样做时,表单中的所有项目都绑定到函数解析的最后一个事件。当我使用.bind() 时,一切都按计划进行 - 即单击“place_x”将值设置为 10,单击“place_y”将值设置为 50。
当使用.on() 时,无论我更改哪个值,都会将值设置为 50,我假设这是因为最后一个函数正在绑定到每个事件。
谁能看到我做错了什么?
更新:有很多不同的方法可以做到这一点,我随后更改了我的代码的工作方式,但是这个问题与为什么 .bind() 工作以及为什么 .on() 不工作有关。
【问题讨论】:
-
你为什么要改变它?
-
您可能应该阅读
.prop(),因为它可能是您想要使用的,而不是这里的.attr()。 -
只是因为
on()应该更高效,但不管怎样我很困惑为什么它不起作用,现在我真的想修复它!
标签: javascript jquery events binding