3

我发现自己在重复这样做。

$jq("button").filter(function(){
    return this.id.match(/^user_(\d+)_edit$/);
}).click(function(){
    var matches = this.id.match(/^user_(\d+)_edit$/);
    var user_id = matches[1];

    alert('click on user edit button with ID ' + user_id);
});

所以我想对一些按钮应用点击事件,在点击事件处理程序中我需要用户 ID。有没有办法避免第二场比赛?

$jq("button").filter(function(){
    return this.id.match(/^user_(\d+)_edit$/);
}).click(function(){
    var user_id = some_magic_variable;

    alert('click on user edit button with ID ' + user_id);
});

谢谢。

4

3 回答 3

10

如何避免第一场比赛?

$jq("button[id^=user][id$=edit]").click(function() {

});

将选择 IDuser 开头并edit 结尾的所有按钮。

虽然老实说,看看您的用例,最好简单地为所有用于编辑用户的按钮提供一个“edit_user”类,然后执行以下操作:

$jq('button.edit_user').click(function() {

});

它更简洁、更快,并且是 jQuery 获取所有用于类似目的的元素的方式。

就获取用户 ID 而言,本网站上对自定义属性进行了一些热烈的讨论(自定义属性 - 是还是不是?),我个人data-userid='5'在我的元素中这样做,然后只是var id = $(this).attr('data-userid');为了获取 ID。好,易于。但是,不会验证为 XHTML。

于 2009-06-29T18:07:37.133 回答
3

当您执行过滤器时,您可以将 ID 存储在元素本身(使用 jQuery 的data方法),然后在单击处理程序中检索该值。

$jq("button").filter(function(){
    var $this = $jq(this);
    var matches = $this.attr('id').match(/^user_(\d+)_edit$/);

    if (matches) {
        $this.data('idNumber', matches[1]);
    }

    return matches;
}).click(function(){
    var user_id = $(this).data('idNumber');

    alert('click on user edit button with ID ' + user_id);
});
于 2009-06-29T18:03:37.823 回答
0

就个人而言,我会预处理 DOM:

$(function() {

$("button").each(function() { 
      var matches = $(this).attr("id").match(/^user_(\d+)_edit$/);

      if (matches) {
         $(this).data("user_edit_id",matches[1]);
      }
   }
});

然后你可以简单地:

$("button").filter(function(){
    return $(this).data("user_edit_id");
}).click(function(){
    var user_id = $(this).data("user_edit_id");

    alert('click on user edit button with ID ' + user_id);
});

这不是您想要的完美解决方案,但它是一种方式......

于 2009-06-29T18:21:07.377 回答