AJAX呼叫查杀事件

时间:2013-10-24 20:47:12

标签: javascript jquery html ajax

我在父页面中有一个div,它通过对HTML的AJAX调用来填充HTML和Javascript。

加载的Javascript将'change'事件绑定到加载的HTML中的元素。

在第一次AJAX调用之后,事件始终会触发。但是,在随后的AJAX调用中,它永远不会。

父页面本身填充到祖父母页面上的div中。在将子页面填充到父页面的div之前,通过对HTML的不同AJAX调用将父页面填充到祖父页面的div中。不确定这是否与我的问题有关。

在绑定事件之前调用对象上的.off()(使用.on)根本没有帮助。

这是元素:

    <select id="groupSelection" name="grouping" style="width:275px;">
        <option value="0" selected>No Grouping - Single Creative Ad Unit</option>
        <option value="1">New Creative Group</option>
        <?php foreach($placementGroups as $placementGroup): ?>
        <option value="<?=$placementGroup->get_id()?>" data-height="<?=$placementGroup->get_height()?>" data-width="<?=$placementGroup->get_width()?>"><?=$placementGroup->get_name()?> - Height: <?=$placementGroup->get_height()?>px x Width: <?=$placementGroup->get_width()?>px</option>
        <?php endforeach;?>
    </select>

这是绑定事件:

    $('#groupSelection').off().on('change', function() {...});

但是如果我在第二次AJAX调用之后显式调用$('#groupSelection')。change()。

我需要做什么?感谢

编辑:

我的代码中有一个地方,孩子调用ajax函数,它不仅重新加载自己,还重新加载其父级。当我在调用ajax函数之前调用$('#groupSelection')。off()时,它工作正常。

但是,父级中还有一些函数可以重新加载子级。当我在其中一个函数中重新加载子进程之前调用$('#groupSelection')。off()时,我仍然遇到同样的问题。

2 个答案:

答案 0 :(得分:0)

如果您的AJAX调用使用groupSelection id替换元素,则需要重新创建事件处理程序。另一种不需要重新创建事件处理程序的格式是:

$('#someElementWhichIsNotReplacedWhichIsAParentOfgroupSelection').on('change', '#groupSelection', someFunc);

答案 1 :(得分:0)

唯一可行的方法是我做$('#groupSelection')。remove();在从父进行ajax调用之前,我必须在每个进行AJAX调用的父函数中执行此操作(ajax调用在无法修改的库函数中)。这对我来说似乎是一个丑陋的解决方案,想要一个更漂亮的解决方案。

我尝试了这个,因为我意识到每次进行ajax调用时$(“select [id ='groupSelection']”)。length都会递增。是否有一种干净的方法来垃圾收集内存中的所有事件和对象,以便在div中替换HTML?这有内存泄漏。

编辑:

在父div上调用.empty()不会删除元素。只显示每个上面的.remove()。