2009-08-10 72 views
0

我通過jquery.ajax加載外部頁面:example.html的的如何操縱ajax加載的內容?

$("#mydiv").load("filter.html"); 

內容:

<div id="filterdiv"><input id="filter" name="filter" size="40"/></div> 

那麼我想操縱輸入#過濾器,所以我在JavaScript中寫道:

$('#filterdiv input').focus(function(){ 
    alert(Hello); 
} 

沒有任何反應。如果我filter.html的代碼粘貼直接向一個頁面,它的工作原理,但是當我通過Ajax調用它,

$('#filterdiv input').focus(function(){ 
    alert(Hello); 
} 

沒有看到AJAX加載內容。我爲什麼做錯了?我該如何操縱ajax加載的html?

回答

3

您需要在加載html後添加事件處理程序。另請注意,我引用了警報參數(不確定這是否是問題或您的問題中的拼寫錯誤)。

$("#mydiv").load("filter.html", null, function() { 
    $("#filterDiv input").focus(function() { 
     alert('Hello'); 
    }); 
}); 

如果您使用的是可以由live方法來處理一個事件,你也可以使用,要對頁面的整個生命週期設置你的處理器一次。不幸的是,重點事件不是其中之一。

新增jQuery的1.3:綁定一個處理 一個事件(像click)的所有 電流 - 和未來 - 匹配 元素。也可以綁定自定義事件。

可能的事件值:單擊, DBLCLICK,鼠標按下,鼠標鬆開, 鼠標移動,鼠標懸停,鼠標移開, 的keydown,按鍵,KEYUP

目前 不支持:模糊,焦點, 了mouseenter,鼠標離開,改變,提交

0

您需要在加載AJAX頁面後應用該操作。這可能意味着將其添加到AJAX頁面的末尾。或者在回調函數上。

$("#mydiv").load("filter.html", null, function(){ $('#filterdiv input').focus(function(){ 
    alert("Hello"); 
} }); 

與服務器端編程的頁面,即使頁面目前獲取,瀏覽器將繼續執行的下一行代碼。如果你在下一行綁定一些東西(比如點擊),頁面可能沒有加載,所以它不會被綁定。

另一方面,回調函數只在AJAX頁面實際加載時執行。

+0

實際上它加載加載Ajax頁面後,完整的代碼看起來像: $(文件)。就緒(函數(){ $( 「#mydiv」)負載( 「filter.html」); $('#filterdiv input')。focus(function(){ alert(Hello); } }); 所以我需要轉移這部分代碼: $('#filterdiv input')。焦點(函數(){ 警報(你好);} ? 從index.html的到filter.html – Andersson83 2009-08-10 21:38:30

+0

只使用回調函數,我建議 – 2009-08-10 21:39:51

+0

即使它在代碼之後發生時,調用是異步此。意味着不能保證它會在下一個語句添加處理程序執行之前完成。將它放入回調函數中 - 如圖所示 - 將確保元素首先被加載。 – tvanfosson 2009-08-10 21:41:58