中的鏈接我將自定義數據屬性data-js-href
添加到各種HTML元素,並且這些元素的行爲就像點擊時的鏈接。如果單擊該元素中的鏈接,則應該優先考慮該鏈接,但應該忽略該功能。此外,該解決方案還需要處理稍後動態添加的元素。通過JavaScript可以使(可能動態加載的)元素可點擊,但優先考慮包含在
到目前爲止,我已經想出了以下解決方案。它主要檢查點擊是否在鏈接或鏈接的任何子元素上執行(請考慮<a href='…'><img src='…' alt='…' /></a>
)。
// Make all elements with a `data-js-href` attribute clickable
$$('body').addEvent('click:relay([data-js-href])',
function(event, clicked) {
var link = clicked.get('data-js-href');
if (link && !event.target.match('a')) {
var parents = event.target.getParents();
for (var i = 0; i < parents.length && parents[i] != clicked; i++) {
if (parents[i].match('a')) {
return;
}
}
document.location.href = link;
}
});
它的工作原理,但感覺很笨拙,我認爲必須有一個更好的解決方案。我嘗試了一些沿線
$$('body').addEvent('click:relay([data-js-href] a)',
function(event, clicked) {
event.stopPropagation();
}
但無濟於事。 (我用一些console.log()
消息散佈代碼來驗證行爲。)任何想法都是值得歡迎的。
感謝您真正有用的解釋,爲什麼事件無法停止。我最終使用了兩個不同元素的委託人,這似乎爲我提供了更容易理解的代碼。 – igor