jQuery中如何传递参数给click()和bind()事件?

56

我想在jQuery中传递一些参数给click()事件,我尝试了以下代码但没有成功:

commentbtn.click(function(id, name){
    alert(id);
});

并且如果我们使用bind,那么我们该怎么做:

commentbtn.bind('click', function(id, name){
    alert(id);
});

3
idname是什么?它们来自哪里?这些值是在单击时获取的还是在绑定时初始化的?单击事件如何知道将什么传递到函数中?它将始终传递事件对象,除此之外不会传递任何其他内容。 - Noufal Ibrahim
1
在绑定事件之前,它们被初始化。 - djmzfKnm
1
那么,正如david在他的回答中建议的那样,你要么将它们保持为顶级变量,要么创建一个闭包。click不知道你想要传递给处理程序的内容。 - Noufal Ibrahim
4个回答

127

参见event.data

commentbtn.bind('click', { id: '12', name: 'Chuck Norris' }, function(event) {
    var data = event.data;
    alert(data.id);
    alert(data.name);
});

如果您的数据在绑定事件之前已经初始化,则可以在闭包中捕获那些变量。

// assuming id and name are defined in this scope
commentBtn.click(function() {
    alert(id), alert(name);
});

1
+1 对于“如果数据已经初始化”部分,我正需要那个! :) - Pawan Nogariya
这真是太棒了! - Everton Lenger
1
jQuery的.click()方法文档指出了这种能力,但没有提供如何使用它的示例。但是,如果您查找'event.data' [https://api.jquery.com/event.data/],您会发现一个示例。还要查看事件对象:https://api.jquery.com/category/events/event-object/ - ReverseEMF

19

你从哪里获得这些值? 如果它们来自按钮本身,你可以这样做:

commentbtn.click(function() {
   alert(this.id);
});

如果它们是绑定作用域中的变量,您可以从外部访问它们

var id = 1;
commentbtn.click(function() {
   alert(id);
});
如果它们是绑定作用域中的变量,在调用单击事件之前可能会发生更改,您需要创建一个新闭包。
for(var i = 0; i < 5; i++) {
   $('#button'+i).click((function(id) {
      return function() {
         alert(id);
      };
   }(i)));
}

当调用click时,变量被改变的情况让我感到困惑。谢谢你解答这个问题! - azheanda

0

An alternative for the bind() method.

Use the click() method, do something like this:

commentbtn.click({id: 10, name: "João"}, onClickCommentBtn);

function onClickCommentBtn(event)
{
  alert("Id=" + event.data.id + ", Name = " + event.data.name);
}

Or, if you prefer:

commentbtn.click({id: 10, name: "João"},  function (event) {
  alert("Id=" + event.data.id + ", Nome = " + event.data.name);
});

It will show an alert box with the following infos:

Id = 10, Name = João


-1
var someParam = xxxxxxx;

commentbtn.click(function(){

    alert(someParam );
});

我想在事件中传递它们。 - djmzfKnm
@Prashant:你能举一个例子吗? - Felix Kling
@Prashant - 你不能只是“添加”更多的参数到你的回调函数!jQuery 不知道从哪里获取这些值... - Jakub Konecki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接