所以我有这些元素,由PHP循环生成:
<input id="toggler" data-toggle="toggle" data-id="1" data-size="small" data-on="Yes" data-off="No" type="checkbox" checked="checked">
<input id="toggler" data-toggle="toggle" data-id="2" data-size="small" data-on="Yes" data-off="No" type="checkbox" checked="checked">
<input id="toggler" data-toggle="toggle" data-id="3" data-size="small" data-on="Yes" data-off="No" type="checkbox" checked="checked">
这使用了JQuery UI的切换程序。
现在,我想做的只是,当用户选中或取消选中其中一个时,通过ajax调用发送,在DB中取消发布它们。
var base = "http://whatever.com/";
var id = $(this).data(id);
var formData = {id:id};
$.ajax({
type: "POST",
url: base+'unpublish',
data: formData,
success: function(data) {
// data is ur summary
$('#result').html(data);
}
});
问题:如何唯一地识别每个元素,而不必具体命名每个元素?
感谢
您知道在单个文档中必须有一个唯一的id
——将它们从循环中删除。
var base = "http://whatever.com/";
$('*[data-toggle="toggle"]').on('click', function(){
var target = $(this),
action = (target.is(':checked') ? 'unpublish' : 'publish'), // get action type based on checkbox checked attribute.
id = target.attr('data-id');
$.ajax({
type: "POST",
url: base+action,
data: {id:id},
success: function(data) {
// data is ur summary
$('#result').html(data);
// update checked attribute.
(target.is(':checked') ? target.prop('checked',false) : target.prop('checked',true));
}
});
});
如果你想用一种简单的方法访问多个元素,他们应该使用一个通用的class而不是ID。ID在HTML文档中必须是唯一的,这样其他人就会提到你的HTML无效。
你可以这样做:
<input class="toggler" id="1" data-toggle="toggle" data-id="1" data-size="small" data-on="Yes" data-off="No" type="checkbox" checked="checked">
<input class="toggler" id="2" data-toggle="toggle" data-id="2" data-size="small" data-on="Yes" data-off="No" type="checkbox" checked="checked">
<input class="toggler" id="3" data-toggle="toggle" data-id="3" data-size="small" data-on="Yes" data-off="No" type="checkbox" checked="checked">
您可以通过引用类在jQuery中找到它们:
$( ".toggler" )
问题:如何在不需要的情况下唯一识别每个元素具体说出每一个名字?
正如在评论和答案中指出的,元素的id
应该是唯一的。您可以从元素中删除id
,并通过其data-id
属性来标识每个元素,这些属性在Question的html
处是唯一的。
<input data-toggle="toggle" data-id="1" data-size="small" data-on="Yes" data-off="No" type="checkbox" checked="checked">
<input data-toggle="toggle" data-id="2" data-size="small" data-on="Yes" data-off="No" type="checkbox" checked="checked">
<input data-toggle="toggle" data-id="3" data-size="small" data-on="Yes" data-off="No" type="checkbox" checked="checked">
$("input[data-id=1]") // first `input`
$("input[data-id=2]") // second `input`
$("input[data-id=3]") // third `input`