我想要超简洁,并且有以下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使用某个选择器为你提供所有指定属性的数组。
我只对一个非常简洁的解决方案感兴趣,最好不要使用'each'函数。
谢谢! SR
答案 0 :(得分: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());