我在一个部分中有两个 Prototype JS 观察器,根据其他用户操作,内容可能会发生变化,但 div 的结构不会发生变化。问题在于包含这两个元素的 div 通过 ajax 调用 () 动态更改。因此我的代码只工作一次,在调用 ajax (new Ajax.Request(url, {parameters...)
更具体地说,这是我所拥有的:
<!-- COD Hck -->
<script type="text/javascript">
$$('.pm_cashondelivery').invoke('on','click','.pm_cashondelivery', function(event, el){
$('id_flatrate_flatrate').setStyle({'display': 'block'});
$$('.metodose').each(
function(elem){
elem.checked=false;
});
$('s_method_flatrate_flatrate').checked=true;
$$('.mayor').each(
function(elem){
elem.setStyle({'display': 'none'})
});
});
$$('.metrest').invoke('on', 'click','.metrest', function(event, el){
$('id_flatrate_flatrate').setStyle({'display': 'none'});
$$('.metodose').each(
function(elem){
elem.checked=false;
});
$$('.mayor').each(
function(elem){
elem.setStyle({'display': 'block'})
});
$$('.mayor input').each(
function(elem){
setTimeout(function(){
elem.setAttribute('checked',true);
},1);
elem.checked=true;//Check double time due Chrome bug
});
});
</script>
第一个观察者是:$$('.pm_cashondelivery').invoke('on','click','.pm_cashondelivery', function(event, el){
。第二个观察者是 $$('.metrest').invoke('on', 'click','.metrest', function(event, el){
。我需要这个观察者即使在 ajax 之后仍然工作调用相同的 div。我们将不胜感激任何类型的帮助。
里卡多
最佳答案
如果每个 Ajax 请求都会重新创建 div.pm_cashondelivery
和 div.metrest
元素,那么您需要在文档树的更上方找到一个元素来附加您的将事件处理程序委托(delegate)给。
例如:
$(document).on("click", ".pm_cashondelivery", function(event) {
// ...
});
$(document).on("click", ".metrest", function(event) {
// ...
});
关于javascript - Ajax 调用后的新观察者原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22205039/