2013-07-11 36 views
0

好的,這是問題所在。 我有一個jqGrid的對話框中,單擊「添加記錄」按鈕後,只有在HTML生成。如何將JavaScript事件處理程序附加到對話框彈出窗口?

我在該對話框中的一個按鈕上附加了一個「Click」事件處理程序,以便在單擊時打開彈出窗口(這是在文檔準備就緒後完成的),但它不起作用,因爲當頁面加載時,處理事件處理程序通過IE瀏覽器,它看到該對話框不存在,並刪除或無效當前無效的處理程序。

你怎麼附加JavaScript事件處理程序,以該對話框(或與此有關的任何元素)執行時,它在加載頁面時不存在的功能? jQuery中

回答

1

如果你可以把對話框(甚至只是一個佔位符div在那裏你會插入對話框的HTML)中加載的頁面加載HTML的某些部分,可以使用委派事件附加事件處理程序,以後代元素在頁面加載時不存在於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對話框時,您正在運行的腳本可以顯示對話框,然後直接將該事件處理程序添加到按鈕。

+0

謝謝你的提示。原來,這個工作原理: { ... });(「#」對話框)。 (「#dialog」)。click(function() ... }); 沒有。奇怪的。我認爲(「click」,func())和click(func())是相同的。 – RedAces

+1

@RedAces - '。點擊(處理)'是'。對一個快捷方式( '點擊',處理程序)',這將對於click事件工作直接'#dialog'元素,但'。對() '用一個不同的func重載:'.on('click',selector,handler)''。這個重載需要一個'selector'來過濾處理程序將運行的元素到'#dialog'中的一些元素子集。這是「委託」而不是「直接」的方式來附加處理程序。你使用''html''作爲選擇器的方式是一個無意義的過濾器。最好使用一個選擇器來標識'#dialog'中添加的按鈕。 – nekno

相關問題