如何将JavaScript事件处理程序附加到对话框弹出窗口?

时间:2013-07-11 20:59:09

标签: javascript asp.net-mvc jqgrid jqgrid-asp.net

好的,这就是问题所在。 我有一个jqGrid对话框,只有在单击“添加记录”按钮后才会在HTML中生成。

我将“Click”事件处理程序附加到该对话框中的按钮,以便在单击时打开弹出窗口(这在文档就绪后完成),但它不起作用,因为当页面加载时,事件处理程序由IE和它看到该对话框此刻不存在并删除或阻止当前无效的处理程序。

如果在加载页面时不存在函数,如何将JavaScript事件处理程序附加到该对话框(或任何元素)来执行函数?

1 个答案:

答案 0 :(得分:1)

如果您可以在页面加载的HTML中放置对话框的某些部分(即使只是占位符div,您将在其中插入对话框的HTML),您可以使用jQuery中的委托事件来附加事件处理程序在页面加载时在DOM中不存在的后代元素(如对话框的元素)。

请参阅jQuery documentation for on()

这会将事件处理程序绑定到click事件,以便在将来的任何时候将ID myButtonId添加到DOM的按钮,只要它位于占位符div内:

<div id="divPlaceholder"><!-- dialog will be inserted into DOM here --></div>

<script type="text/javascript">
    $($("#divPlaceholder").on("click", "#myButtonId", function() {
        window.open(...);
    }));
</script>

或者,当用户单击“添加记录”以显示jqGrid对话框时运行的任何脚本都可以显示该对话框,然后将事件处理程序直接添加到该按钮。