我有一个问题一直困扰着我好几天。
我有一个div,div有一个隐藏的样式(.copy { display: none; }
)。
我有一个链接(添加新的),当单击时,复制该div并删除类“copy”,导致div出现。
在这个div中,我有4个复选框和一个文本输入。单击此复选框,值将显示在此输入文本中。
当我点击“添加新”时,他确定,但是如果我再点击链接“添加新”,它会显示div的第二个输入中的所有复选框值,如果我再次单击“添加新”他开始将值放在第三个div的输入中......
解释起来很复杂,我不知道我是否清楚,但把例子放在jsbin http://jsbin.com/eteyu3中。
请参阅:
仅单击“添加新”一次,然后单击复选框。然后再次单击“添加新”,看它是否正常工作。
我希望他只显示div对应复选框的值。
答案 0 :(得分:4)
我改变了这种方式,现在就可以了。
jQuery(document).ready(function() {
var $current = jQuery(this);
jQuery(".add_new").bind("click", function() {
var copy = jQuery(".copy").clone().insertBefore(".copy").removeClass("none").removeClass("copy");
jQuery("input:checkbox", copy).click(function() {
var val = [];
jQuery(':checkbox:checked', copy).each(function(i) {
val[i] = jQuery(this).val();
});
jQuery(".resultfinal", copy).val ( val );
});
jQuery(".count").val( jQuery(".opt:not(.copy)").length );
});
});
答案 1 :(得分:0)
虽然我正在努力解决这个问题......每个人都可以使用它:http://jsfiddle.net/c8aHb/
答案 2 :(得分:0)
也许你的例子是人为的,但你的方法似乎更复杂。无论如何,你的问题是你重复绑定所有复选框的click事件,这将导致多个事件被触发。尝试
unbind('click').bind('click')
执行点击装订的地方
答案 3 :(得分:0)
您可以使用.parent()
查找包含已点击复选框的div,然后在该父级中搜索您要填充的文本框。
jQuery($seletor + ':checkbox').click(function()
{
var val = [], $parent = jQuery(this).parent();
$parent.find(':checkbox:checked').each(function(i)
{
val[i] = jQuery(this).val();
});
$parent.find(".resultfinal").val ( val );
});
您还可以使用.live
而不是在创建每个复选框时担心绑定事件。您的代码将归结为:
jQuery.noConflict();
jQuery(document).ready(function()
{
jQuery('div.opt :checkbox').live('click', function() {
var val = [], $parent = jQuery(this).parent();
$parent.find(':checkbox:checked').each(function(i) {
val[i] = jQuery(this).val();
});
$parent.find('.resultfinal').val(val);
});
jQuery(".add_new").bind("click", function() {
jQuery(".copy").clone().insertBefore(".copy").removeClass("none").removeClass("copy");
jQuery(".count").val( parseInt(jQuery(".count").val()) + 1 );
});
});