Ajax调用后的Prototype New Observer

时间:2014-03-05 17:36:19

标签: javascript html css ajax prototypejs

我在一个部分中有两个Prototype JS观察者,根据其他用户操作,可能会改变内容但不会改变div的结构。问题是包含两个元素的div通过ajax调用()动态更改。因此我的代码只能工作一次,在ajax调用之后(新的Ajax.Request(url,{parameters ...),即使元素具有相同的类名,divs结构等,一切都会停止工作。

更具体地说,这就是我所拥有的:

<!-- 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){。即使在相同的div中调用ajax之后,我也需要这些观察者仍在工作。任何形式的帮助将受到高度赞赏。

里卡多

1 个答案:

答案 0 :(得分:0)

如果正在使用每个Ajax请求重新创建div.pm_cashondeliverydiv.metrest元素,那么您需要在文档树的后面找到一个元素,以将委派的事件处理程序附加到。

例如:

$(document).on("click", ".pm_cashondelivery", function(event) {
    // ...
});

$(document).on("click", ".metrest", function(event) {
    // ...
});