2011-06-06 114 views
1

下面的代碼不起作用,並返回遞歸錯誤。我在這裏查看了其他一些帖子,並特別看到了一個(http://stackoverflow.com/questions/639862/too-much-recursion-error-in-jquery-1-3-2)我認爲會幫助我,我調整我的代碼,但你猜我沒有變的原則,因爲我仍然得到錯誤...jquery - 太多遞歸

//Note - can't use radios... must use checkboxes 

$('div.divCheck').click(function() { 
     var testEv = $(this).find('input').attr("id"); 
     $(this).children('div').toggleClass('selected'); 
     $("input#"+testEv).click(); 
}); 

HTML:

<div class="divCheck clearfix"> 
    <div class="checkboxArea1 unselected"> 
     <input type="checkbox" id="pqrs"> 
     <label class="filterlabel pqrCheckbox">PQR</label> 
    </div> 
</div> 
+1

我看到你使用jQuery遞歸。你應該完全放棄這一點,...哦,等待... – 2011-06-06 22:17:16

回答

1

您遇到事件冒泡。你有一個綁定到CheckBox的click事件的函數嗎?它看起來像CheckBox的click事件冒泡回到包含它的div,這引起了循環遞歸。我會考慮將div單擊處理程序的最後一行更改爲$('input#' + testEv).attr('checked', 'checked');之類的內容。您也可以在CheckBox的點擊處理程序中使用StopPropagation。

0

我相信問題是點擊事件傳播了DOM樹,因此點擊事件處理程序正在調用自己,導致錯誤。嘗試了這一點:

$('div.divCheck').click(function(e) { 
    var testEv = $(this).find('input').attr("id"); 
    $(this).children('div').toggleClass('selected'); 
    $("input#"+testEv).click(); 
    e.stopPropagation(); 
}); 
+0

我懷疑是因爲其他職位,我嘗試了「stopPropagation」和「返回false」的變體,但我仍然得到遞歸錯誤。這是最新的迭代,沒有工作......'$('div.divCheck')。click(function(){var 012E} = $(this).find('input')。attr( 「ID」); \t \t $( '輸入#' + testEv)。單擊(); \t \t返回假; \t \t \t \t $( '輸入#' + testEv)。單擊(函數(e)中{\t \t \t e.stopPropagation(); \t \t}); \t \t $(this).children('div')。toggleClass('selected' ); });' – 2011-06-06 22:45:17

+0

我也應該說我複製並粘貼了你的代碼(這是第一次迭代),並且它也沒有阻止遞歸錯誤。 – 2011-06-06 23:59:43

0

如果你只是試圖讓選中複選框就可以使用jQuery的prop功能。

$('div.divCheck').click(function() { 
     var testEv = $(this).find('input').attr("id"); 
     $(this).children('div').toggleClass('selected'); 
     var $elm = $("input#"+testEv); 
     $elm.prop('checked', !$elm.prop('checked')); 
}); 

See Fiddle