2012-08-22 75 views
0

我有兩個文件,它們在編碼中是精確的,文件A和B.在文件A中有鏈接來創建文件B的彈出窗口。在文件A的頂部,I創建了一個鏈接(a href),單擊它時會提醒用戶。這確切的代碼是在文件B.它可以在文件中的,而不是在文件B.jQuery點擊在彈出窗口中不起作用

<a href="#" id="send-email">Send Email</a> 

而jQuery的:

$('#send-email').click(function(e) { 
     alert('works'); 
    }); 

好奇的是,他們都鏈接到同一外部jQuery文件,以及其他可用的jQuery函數(例如,手風琴菜單),除了這個彈出式單擊。我試着先使用jQueryUI,但這就是我發現這個問題的方法;然後我去了準系統點擊提示,這就是我在上面發佈的代碼。

是否.click在彈出窗口中工作?如果是這樣,怎麼樣?

+0

是的,它會彈出工作,在瀏覽器中打開它,並檢查你正在嘗試點擊,找到該元素的確切ID是什麼元素,瀏覽器可能已經改變了ID –

+0

@ScottSelby,如果他的瀏覽器正在改變他的ID,我建議他發現自己是一個新的瀏覽器:) –

+0

原來,這是一個問題在$(document).ready(function ())。我認爲彈出窗口不被視爲「準備好」,這就是我遇到這個問題的原因。 – Hybride

回答

1

彈出(除非你在某些瀏覽器中談論會話狀態和上下文,但這不是問題)。 click的功能與彈出窗口中的功能相同,即使在其他窗口中也是如此。雖然有很多事情可能會導致你的問題。重複的ID,缺少/拼寫錯誤的功能等

所以我不能給你一個明確的答案,但這裏有一個很好的一步進行調試:

,而不是一個click事件連接到它的方式,你正在做它(請注意,你的方法是不是我的方式更爲正確的,但我在調試方式助劑),像這樣做:

<a href="#" onclick = "alert('works')" id="send-email">Send Email</a> 

如果不工作,也許你阻止彈出或什麼的。這是警報的問題。如果它不工作,試試這個:

<a href="#" onclick = "AlertIt()" id="send-email">Send Email</a> 

與此別處您的網頁上:

function AlertIt() { 
alert("worked"); 
} 

如果這個工程太,你很可能看着裝載的jQuery或jQuery的衝突問題,更。

編輯:哦,還有一件事。嘗試使用jQuery的live函數。這將事件處理程序附加到元素是否已存在。如果元素已經存在,click將只附加事件。這可能是由於您正在使用的操作順序而導致的。

live看起來是這樣的:

$("#send-email").live("click", function(){ alert("Worked"); }); 
+1

所有這些選項都起作用,標記爲正確。我對舊代碼進行了測試,看起來問題在於代碼位於$(document).ready(function())內。我會採取(不正確的)刺法,並說代碼有效,但問題在於彈出不被視爲「準備就緒」。一旦我將該代碼移出該功能之外,它就完美地工作了。 – Hybride

+0

@Hybride很好,實際上,這不是document.ready()的工作原理。它的'document.ready(...)'部分就是所謂的事件。你在裏面看到的'function(){...}'部分被稱爲事件*處理器*。當文檔的'ready'事件被觸發時,該函數內的所有東西都會運行,當所有元素都被加載時會發生這種情況。簡單地說,放入document.ready()函數內的任何東西都會等待,直到所有元素都完成加載,然後自動執行。有趣的是,ready處理程序實際上可能是該代碼的**最好的**位置。 –

+0

@Hybride然後,我更新的猜測是,您在就緒處理程序的上下文中存在jQuery衝突。或者它可能是因爲你的準備處理程序附近有一個語法錯誤,並且它不被解析爲一個函數,所以它不會被調用。不過,無論如何,你的document.ready中正在發生一些奇怪的事情 –

0

你對彈出窗口有什麼意思?你的意思是jQueryUI對話框?如果加載JavaScript代碼時存在標記嗎?

,你可以,如果你正在使用jQuery使用.on 1.7+,只是做所有#send-email要麼是在網頁加載時,或者你用AJAX加載在dyanmic委託:

$(function() { 
    $(document).on("click", "#send-email", function(e) { 
     alert('works'); 
     e.preventDefault(); 
    }); 
}); 
1

同意@voigtan。爲動態內容分配事件處理程序可能會很棘手。

在事件處理程序未綁定到彈出窗口中的內容的情況下,以及在文檔就緒處理程序中綁定事件的情況下。有兩種方法,你可以照顧的是:

  1. 有顯示的彈出內容後回調,並綁定事件新的元素
  2. 如果元素有一個統一的事件處理程序,爲它們分配一個類可以用作選擇器並通過jQuery :: live()調用附加事件。這裏有一個例子:

    <a href="#" class="send-email">Send Email</a> 
    
    $(function() { 
        $(document).on("click", "a.send-email", function(e) { 
         alert('works'); 
         e.preventDefault(); 
        }); 
    }); 
    
相關問題