2013-04-10 104 views
0

我想檢查DIV內容,當div的內容發生變化時,我會發現存在表單域或不存在。我與此代碼嘗試,但沒有響應:JQuery檢查DIV內容更改

$.fn.exists = function(){return this.length>0;} 
$("div.provider_name").live("change",function(){ 
    if ($('input[id=checkout_provider_checkout_moneyorder]').exists) 
    { 
     alert('Input field exist'); 
    } 
}); 

輸入字段顯示dynamicaly,所以這就是爲什麼我wnat檢查這個特定的領域存在。

+2

DIV的沒有'change'事件。爲了解決這個問題,你需要使用'mutation observer'或者一個高層的DOM請求,比如'DOMNodeInserted'。 – Ohgodwhy 2013-04-10 07:00:55

+0

請參閱:http://stackoverflow.com/questions/1091661/detect-element-content-changes-with-jquery – Cristy 2013-04-10 07:02:11

+0

另外,當你真正改變div的內容時,爲什麼不'觸發'change事件? – Cristy 2013-04-10 07:03:34

回答

1

更改事件在所有元素上都不可用 - 因此即使div元素的內容發生更改也不會觸發。

更改事件可用於表單元素。

它看起來像你需要的是制定出當一個特定的形式元素變得可用,你可以使用的間隔檢查爲:

var checkForInputTimer; 
var checkForInput = function() { 
    if ($("#checkout_provider_checkout_moneyorder").length > 0) { 
     window.clearInterval(checkForInputTimer); 
     alert("Do your processing here"); 
    } 
}; 

checkForInputTimer = window.setInterval(checkForInput, 2000); 

在這個例子中,我只是通過ID檢查的元素,這是鑑於ID必須是唯一的最有效的搜索。

您也可以創建一個自定義事件,但您必須記住要使用更新div元素的任何代碼觸發事件。我已經創造了這個JS Fiddle

$('div.provider_name').bind('contentChanged', function(event, data) { 
    if ($('#checkout_provider_checkout_moneyorder').length > 0) { 
     alert('Do your processing here'); 
    } 
}); 

而且無論你更新div,你觸發該事件:

$('div.provider_name').html('<input type="text" name="example" id="checkout_provider_checkout_moneyorder" value="example">') 
    .triggerHandler('contentChanged'); 
+0

對不起,您能解釋一下更多...我們可以在那裏應用查找事件! ! – 2013-04-10 07:05:34

+0

@ime我爲你添加了一個代碼示例。 – Fenton 2013-04-10 07:07:49

+0

它會在頁面加載時提醒msg,但實際上頁面源中不存在字段。 – 2013-04-10 07:09:03