Я написал этот фрагмент кода несколько лет назад, и в то время он работал в FF & Chrome, но теперь он приводит к бесконечному циклу в Chrome.
<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/
По сути, это то, что он должен делать, если пользователь щелкает внутри div (то есть в заголовке), он находит ссылку внутри него и вызывает щелчок по нему. В Chrome этот вызванный щелчок также распространяется обратно к родителю, который, в свою очередь, снова запускает весь процесс.
Я знаю, что должен использовать менее навязчивый javascript, но это происходит из-за старого приложения rails (надеюсь, обновление будет достаточно скоро).
Есть идеи, почему событие не перестает распространяться? Технически код должен работать без вызова stopPropagation, так как оператор if внутри функции должен остановить последующие вызовы от запуска. По-видимому, Chrome не обновляет currentTarget при программном вызове клика