2010-08-12 76 views
1

我有一個問題,一直在消耗我幾天。jQuery中的複雜問題

我有一個div和div有它隱藏的風格(.copy { display: none; })。

我有一個鏈接(添加新),單擊時,使該克隆的克隆,並刪除類「複製」,導致div出現。

在這個div裏面,我有4個複選框和一個文本輸入。單擊此複選框,值將顯示在此輸入文本中。

當我點擊一次「添加新的」時,他確認,但如果我點擊第二次鏈接「添加新」,它會顯示div的第二個輸入中的所有複選框值,如果再次點擊在「添加新」他開始把值的輸入的第三個分區...

這很複雜的解釋,我不知道我是否清楚,但把例子在jsbin http://jsbin.com/eteyu3

請參閱:

單擊「添加新」只有一次,然後單擊複選框。然後再次點擊「添加新的」,看到它停止正常工作。

我希望他只顯示div對應複選框的值。

+1

您有多個相同ID,名稱等的實例。單擊複選框時應該顯示數字的位置有些混淆。每組複選框應該唯一標識。 – 2010-08-12 15:20:33

+0

我看不到任何使用Firebug在30分鐘內無法解決的問題。 (或蜻蜓,或任何其他瀏覽器上的其他開發工具,甚至IE) – AlexanderMP 2010-08-12 15:24:33

回答

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

謝謝。完美運作。 – 2010-08-12 15:42:40

0

,而我就可以解決這個問題......每個人都可以使用這個:http://jsfiddle.net/c8aHb/

+4

應該是一個評論,而不是一個答案。 – meagar 2010-08-12 15:31:40

0

也許你的例子是人爲的,但你的做法似乎更復雜,它需要。無論如何,你的問題是你重新綁定所有複選框的點擊事件會導致多個事件被觸發。嘗試

unbind('click').bind('click') 

,你做的點擊結合

0

您可以使用.parent()找到包含點擊複選框格,然後是父母對你試圖填充文本框進行搜索。

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

謝謝。完美運作。 – 2010-08-12 15:54:12