所以我相信這不是最好的方式來做到這一點,但我仍然非常可怕在這種事情...所以我想要做的是有一個委託事件綁定到IMG的因爲它們被動態添加到容器中。單擊圖像時,彈出一個框,您可以鍵入一個新鏈接,然後更改圖像的src。這一切都可以正常工作,除非在後續圖像上更改鏈接時,在IMG上執行的腳本會在當前圖像上觸發,以及後續圖像被點擊。 (所以如果我改變圖像#1,並且然後改變圖像#2,圖像#1和#2在第二次嘗試時都被改變)。如何阻止jQuery委託事件影響多個元素?
我有點理解這是因爲授權事件被傳播到所有匹配的元素而發生的事情,但我一直在谷歌搜索幾個小時的事件傳播,我不能得到任何工作。
這裏是調用時改變了點擊圖片的鏈接功能:
function changeLink(image) {
console.log('OK button clicked');
var inputField = $('input[name="newUrl"]');
var p = '';
var prefix = checkForPrefix(p);
var link = prefix + inputField.val();
function checkForPrefix(p) {
if (inputField.val().match('http')) {
console.log("HTTP already exists, so no need to add it.");
return p;
} else {
p = 'http://';
console.log("No prefix, so I am going to add " + p + " to the link.");
return p;
}
}
$(image).fadeOut(300, function(event) {
$(image).attr("src", link);
}).fadeIn(300);
$('.new-link-container').animate({
opacity: 0,
},
'fast',
function(event) {
console.log('Fading out link box');
$(this).css('z-index', '0');
});
}
這裏是分配委派點擊的功能,並在鏈接的形式消失:
$('#editor').on('click', 'img', function(event) {
var image = this;
$('.new-link-container').animate({
opacity: 1,
},
'fast',
function() {
console.log("Fading in link box");
$(this).css('z-index', '99');
});
$('input[name="newUrl"]').attr('placeholder', 'Please enter a new location for your image');
$('.cancel').click(function() {
console.log('Cancel button clicked');
$(this).closest('.new-link-container').animate({
opacity: 0,
},
'fast',
function(event) {
$(this).css('z-index', '0');
});
});
$('.accept').click(function(event) {
changeLink(image);
});
});
編輯 - 這裏是網址輸入的元素:
<div class="new-link-container">
<div class="new-link-container-start"></div>
<div class="new-link">
<input name="newUrl" type="text" placeholder="Please enter a new location for your image">
<div class="buttons">
<button class="cancel">Cancel</button>
<button class="accept">OK</button>
</div>
</div>
<div class="new-link-container-end"></div>
</div>