2015-01-20 4 views
1

У меня есть следующая структура DOM.Изменение обработчика onclick элемента, добавленного динамически после загрузки страницы

<div class="purchase-section"> 
    <div class="purchase"> 
     <input type="submit" id="add-to-cart" class="btn" name="add" value="Add to Cart"> <span class="rc-or">Or</span> 
     <button class="btn rc-button" id="btn-buy-now" onclick="event.preventDefault(); window.location='https://example.com?productId=681';">Buy Now - 3 installment</button> 
    </div> 
</div> 

Элемент кнопки добавляется скриптом, который запускается после загрузки страницы. Мне нужно изменить обработчик onclick для этой кнопки. Я пробовал следовать, но это не сработает.

$(document).ready(function() { 
$('.purchase-section').on('change', '.purchase', function(){ 
    $("#btn-buy-now")[0].onclick = null; 
    $("#btn-buy-now").click(function() { alert("done") }); 
    }); 
}); 

Может ли кто-нибудь помочь мне в этом?

+1

Почему вы используете функцию 'change' для события' click'? Просто напишите новую функцию щелчка и используйте 'off()', если вам нужно удалить предыдущую функцию щелчка. Кроме того, в div нет события изменений. – isherwood

+0

@isherwood Как связать событие off() с элементом кнопки? –

ответ

0

Используйте $("#btn-buy-now").removeAttr("onclick"); для полного удаления onclick, а затем делегируйте событие динамически добавленному элементу.

$("static_parent").on("event", "dynamic_element", function() { 
}); 

$(".purchase").on("click", "#btn-buy-now", function() { 
    /* code */ 
}); 
+0

Вы уверены, что удаление атрибута также удаляет связанные функции событий? Я бы использовал 'off()'. – isherwood

+0

@isherwood он удаляет функцию, удаляя атрибут. http://jsfiddle.net/nv36wd7L/ – Ciccolina

+1

'off()' не будет работать, поскольку он не добавляется с 'on()' ... лучше зарегистрировать исходное событие клика, используя 'on()' as Что ж. – giorgio

0

Попробуйте это:

$(document).ready(function() { 
    $(".purchase-section").find("#btn-buy-now").removeAttr('onclick'); 
    $(".purchase-section").find("#btn-buy-now").click(function(e) { 
     e.preventDefault(); 
     alert("done"); 
    }); 
}); 

Однако, это зависит от того, когда будет загружен этот элемент. Вам нужно будет убедиться, что ваша кнопка уже находится в DOM до, этот скрипт выполняется, иначе это может быть неэффективно.

+0

Вот jsfiddle: http://jsfiddle.net/cctcrwqv/ – anthony