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が必要です。2番目の試合を回避する方法はありますか?

$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() {

});

ユーザーで始まり編集で終わるIDを持つすべてのボタンを選択します。

正直なところ、ユースケースを見ると、ユーザーを編集するためのすべてのボタンに「edit_user」のクラスを指定して、次のようにする方がはるかに良いでしょう。

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

});

これは、よりクリーンで高速であり、同様の目的を果たすすべての要素を取得するjQueryの方法です。

ユーザーIDを取得する限り、このサイトではカスタム属性(カスタム属性-Yayまたはnay?)について活発な議論が行わdata-userid='5'れており、私は自分の要素で個人的に行いvar id = $(this).attr('data-userid');、IDを取得するだけです。素晴らしくて簡単。ただし、XHTMLとして検証されません。

于 2009-06-29T18:07:37.133 に答える
3

フィルタを実行するときに(jQueryのデータメソッドを使用して)要素自体にIDを格納し、クリックハンドラでその値を取得できます。

$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 に答える