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")]);

简单地说,上面获取了当前检查的 Checkbox 类型的所有输入字段,并将元素数组作为参数传递给绑定的处理程序(根据此问题中的第一个代码示例)。

功能上,这段代码运行良好。我只是觉得有很多代码可以做一些比较简单的事情,那就是将所有选中的复选框的“data-field-id”属性值作为参数传递给触发器。

理想情况下,传递给触发器处理程序的值的简单 json 数组会好得多。触发器处理程序实际上不必知道输入元素,因为它只想接收属性值数组。

我想,我的问题的底线是,您如何要求 JQuery 使用某个选择器为您提供所有指定属性的数组。

我只对一个非常简洁的解决方案感兴趣,最好不涉及使用“每个”功能。

谢谢!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 回答