我认为这是一个非常基本的问题,但我正在努力解决这个问题。
在我的表单上,我可以选择动态地向表中添加一个新行,这很简单,可以使用jQuery。在其中一个元素上,我需要绑定一个事件,也相对简单。我遇到问题的部分是需要绑定的事件必须带参数。所以,我得到的代码:
$(newrow).find("select").each(function () {
var ochange = function(handle){
var thisselect = "select" + handle;
var thislink = "link" + handle;
var thiscollate = "collate" + handle;
if(document.getElementById(thisselect).value == 4){
document.getElementById(thislink).style.visibility = 'visible';
}
else{
document.getElementById(thislink).style.visibility = 'hidden';
document.getElementById(thiscollate).value = "";
}
};
$(this).change(ochange);
$(this).attr("name", "select" + numfields);
$(this).attr("id", "select" + numfields);
});
事件按预期绑定,但“handle”变量没有注册(当然因为我很确定这是不正确的语法)。此外,我想要绑定到动态表单元素的这个函数实际上已经定义了,所以如果有一种方法可以调用已定义的函数(需要参数),我很乐意听到它。
答案 0 :(得分:0)
在您的代码中,'handle'变量是一个jQuery对象,表示'select'小部件更改的事件。如果要获取触发此事件的DOM对象,请使用handle.target属性。例如,要获取其名称,请使用handle.target属性。获取目标的jQuery对象 - $(handle.target)。
事件对象的完整参考是here
答案 1 :(得分:0)
事件处理函数的第一个参数是event object。
如果我理解正确,基本上你想将值传递给ochange
函数。
你可以在每个回调函数的范围内声明变量handle
,并在ochange
函数上使用它的值,因为你有jQuery,你可以使用它在该函数中,并避免getElementById调用:
$(newrow).find("select").each(function () {
var handle = "someValue"; // this variable will be accessible inside ochange
var ochange = function(){
var thisselect = "select" + handle;
var thislink = "link" + handle;
var thiscollate = "collate" + handle;
if($(thisselect).val() == 4){
$(thislink).css('visibility', 'visible');
}
else{
$(thislink).css('visibility', 'hidden');
$(thiscollate).val('');
}
};
$(this).change(ochange);
$(this).attr("name", "select" + numfields);
$(this).attr("id", "select" + numfields);
});
答案 2 :(得分:0)
您可以提供“帮助”功能:
$(this).change( function (evt) {
ochange('someVal')
});
另一个复杂但同时又简单的选项是jquery.hitch插件(jQuery 1.3.3中有哪些类似的东西?)
有了它,你可以这样做:
var obj = {
attr: "blah",
myFunc: function(arg){
console.log(this.attr + " " + arg);
}
}
$(this).change( $.hitch( obj, "myFunc", "wheee") )