1

私は非常に簡潔にしようとしています。カスタムトリガーイベントをリッスンする次のJavaScriptコードがあります。

var concat = "";
$("body")
    .unbind("__evt_selgrps_ok")
    .bind("__evt_selgrps_ok", function(event, param) {
        $(param).each( function() {
            concat += $(this).attr("data-field-id");
        });
    });

イベントは、次のコードを使用してトリガーされます。

$("body")
    .trigger('__evt_selgrps_ok', 
    [$("#<%=DialogID%>").find(":input:checked")]);

簡単に言うと、上記は現在チェックされているチェックボックスタイプのすべての入力フィールドを取得し、要素の配列をパラメーターとしてバインドされたハンドラーに渡します(この質問の最初のコード例のように)。

機能的には、このコードはうまく機能します。比較的単純なことを行うためのコードがたくさんあると思います。それは、チェックされたすべてのチェックボックスの「data-field-id」属性値をパラメーターとしてトリガーに渡すことです。

理想的には、トリガーハンドラーに渡される値の単純なjson配列の方がはるかに優れています。トリガーハンドラーは、属性値の配列を受け取りたいだけなので、実際には入力要素について知る必要はありません。

私の質問の要点は、特定のセレクターを使用して、指定されたすべての属性の配列を提供するようにJQueryにどのように依頼するかということだと思います。

私は非常に簡潔な解決策にのみ興味があります。これには、「each」関数の使用が含まれないことが望ましいです。

ありがとう!SR

4

1 に答える 1

2

map()を使用して、一連の要素から属性の配列を投影できます。

var fieldIds = $("#<%=DialogID%> :input:checked").map(function() {
    return $(this).attr("data-field-id");
}).get();

あなたの場合、あなたはそれをこのように使うことができます:

$("body").trigger("__evt_selgrps_ok",
    $("#<%=DialogID%> :input:checked").map(function() {
        return $(this).attr("data-field-id");
    }).get());
于 2012-10-17T10:36:36.447 に答える