如何向jQuery事件绑定中的回调函数传递参数呢?
一个典型的错误
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| var utils = { getenv: function (jq_btn) { var chenv = jq_btn.attr("id"); alert("begin get list"); getQidmergelist(qid,chenv); alert("get list ok"); $("#chooseQidenv").modal('hide'); } }; $.each($("#chooseQidenv .modal-body button"),function(index,value) { $(value).on("click",utils.getenv($(this))); });
|
以上,是想在chooseQidenv下的所有button上绑定 点击事件,然而这个事件中的回调函数必须传递jq对象,要不然在getenv中使用$(this)这个$(this)就表示的是utils这个对象本身,而不是jQ中的DOM对象
而上面的这种写法,有一个致命的错误,那就是对$(value) DOM绑定click事件的时候,直接调用了getenv函数,原本是想向其传递参数,最后却成为了调用。这会导致一些奇怪的结果。在这里就是还没有点击按钮,按钮事件就已经发生产生了查询结果。
正确的写法
1 2 3 4 5
| $.each($("#chooseQidenv .modal-body button"),function (index, value) { $(value).on("click", function () { utils.getenv($(this)); }) });
|
上面使用的是一个匿名函数,然后通过这个匿名函数向回调函数传递了想要的参数。
当然也可以使用jQuery中的bind方法
1 2 3 4 5 6 7
| $(document).ready(function() { $("#myTextbox").bind("blur", [ $("#myTextBox"), $("#Select1")], validateText); }) function validateText(event) { textBox = event.data[0]; dropdown = event.data[1]; }
|
pass arguments to event handlers in jQuery
bind