我幾年前編寫了這段代碼,當時它在Chrome中運行,但現在它在Chrome中導致無限循環。與event.stopPropagation()和onClick(jQuery)相關的問題
<script>
function clickChildLink(el, event) {
console.log('inside function');
var evtTarget = $(event.target);
if (evtTarget.is('a')) {
console.log('returning');
return; //ignore clicks if its a link
}
$(el).children('a').click();
}
</script>
<div onclick="clickChildLink(this, event);">
<a href="#" onclick="console.log('before'); event.stopPropagation(); console.log('after'); return false;">Header</a>
</div>
您可以運行此代碼:http://jsfiddle.net/Py7Mu/205/
基本上,它應該做的,就是如果股利(即標題)裏面的用戶點擊,它發現其中的鏈接,並調用點擊它。在Chrome上,這個被調用的點擊也會傳播回父級,這又會啓動整個過程。
我知道我應該使用較少突兀的JavaScript,但這源於舊的rails應用程序(升級將有望很快到來)。
任何想法爲什麼事件不會實際停止傳播?從技術上講,代碼應該在沒有stopPropagation調用的情況下工作,因爲函數中的if語句應該會阻止後續調用的觸發。顯然,當編程調用點擊
這些代碼讓我頭昏眼花。 – 2011-12-21 06:51:11
嗯,有一件事我可以看到:當Chrome認爲它屬於'div'時,Firefox將事件視爲屬於'a'元素。 – 2011-12-21 07:13:38
下面是在控制檯中顯示'event'的相同代碼;我也停止循環以保存理智';)'。 http://jsfiddle.net/Py7Mu/213/ – 2011-12-21 07:18:10