jQuery中的复杂问题

时间:2010-08-12 15:12:48

标签: jquery html input

我有一个问题一直困扰着我好几天。

我有一个div,div有一个隐藏的样式(.copy { display: none; })。

我有一个链接(添加新的),当单击时,复制该div并删除类“copy”,导致div出现。

在这个div中,我有4个复选框和一个文本输入。单击此复选框,值将显示在此输入文本中。

当我点击“添加新”时,他确定,但是如果我再点击链接“添加新”,它会显示div的第二个输入中的所有复选框值,如果我再次单击“添加新”他开始将值放在第三个div的输入中......

解释起来很复杂,我不知道我是否清楚,但把例子放在jsbin http://jsbin.com/eteyu3中。

请参阅:

仅单击“添加新”一次,然后单击复选框。然后再次单击“添加新”,看它是否正常工作。

我希望他只显示div对应复选框的值。

4 个答案:

答案 0 :(得分:4)

http://jsbin.com/eteyu3/2

我改变了这种方式,现在就可以了。

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 );
  });  
});