我在Google地图上使用infowindow
显示了5个标记。每个内容都有复选框。
当用户点击每个时,我将div内容添加到比较列表。有Remove
按钮将其删除。我想在删除时取消选中。完整代码在这里JSFIDDLE
我现在有两个问题
在每次检查时,我想将他们的ID保存在隐藏的字段中,我尝试了这段不起作用的代码
var value = [];
var count = 0;
$('#map-canvas input:checked').each(function() {
value+=$(this).attr('value')+',';
count++;
});
$('#cmpIds').val(value);
在“删除”按钮上单击“我想取消选中每个复选框并隐藏它。我有此功能对每个弹出窗口都不起作用onclick="removeAdd(this);"
答案 0 :(得分:0)
$(document).on('click', '#button-id', function() {
// your code here
});
答案 1 :(得分:0)
您的代码存在两个主要问题。首先,您正在错误地构造一个数组。为了根据复选框值构造数组,不要按字面构造它(即通过在值之间插入,
)。相反,您使用.push()
,即:
var value = [],
count = 0;
$('#map-canvas input:checked').each(function() {
value.push($(this).attr('value'));
count++;
});
$('#cmpIds').val(value);
其次,您还应该避免使用内联JS来执行删除功能。如果要将事件处理程序绑定到动态添加的元素,请使用.on()
。因此,对于注入的标记,只需删除内联JS引用:
<a class="text-success">Remove</a>
另外,我使用$(this).closest('.media')
来查找.parent().parent()
,因为它更详细。您可以缓存此选择器,以便jQuery不必在同一个单击事件中反复梳理DOM:
$(document).on('click', '.text-success', function() {
var $parent = $(this).closest('.media');
// Remove listing
$parent.remove();
// Uncheck associated textbox
var parentID = $parent.attr('id'),
checkboxID = parentID.split('_');
$('#'+checkboxID).prop('checked', false);
});
在这里工作小提琴:http://jsfiddle.net/teddyrised/z0Lkbmyh/4/
其他说明:每次在复选框上注册更改事件时,您的value
数组和count
变量都会重置。我怀疑,虽然我无法确认,这不是理想的行为 - 我相信你想要随时跟踪已检查的属性。因此,您应该声明它们 .change()
处理程序
var value = [],
count = 0;
$(document).on('change', '.wrapmap-gist input:checkbox', function() {
$('#map-canvas input:checked').each(function() {
value.push($(this).attr('value'));
count++;
});
$('#cmpIds').val(value);
// Rest of your code here
});