2011-06-11 55 views
1

我有一個聯繫表單,它在成功完成sendmail函數時將值發送到隱藏輸入。我想檢測這個值的變化,然後用它來將一個類應用到div /段。jQuery addClass當隱藏輸入的值變動時

最近我問了一個類似的問題,我知道這需要腳本在DOM加載後不斷檢查文檔,但即使添加.change()後,它似乎也不想添加該類。

這裏是jQuery的:

$(document).ready(function() { 
    $("#acf_success_sent").change(function(){ 
    if ($("#acf_success_sent").val() == "1"){ 
    $("#acf_verified").addClass('gone'); 
    } 
    }); 

}); 

任何幫助將是巨大的。這裏是在案件形式的測試版本的鏈接你有興趣,一切正常,除了驗證符號並不成功發送後disspapear http://seeshell.me/forms/contact.php

回答

2

再也沒有「改變」時觸發的事件代碼更新您的<input>元素的值,所以您註冊的處理程序將不會運行。然而,你可以做的是從看門狗開始「更改」:

var watchdog = setInterval(function() { 
    if ($('#acf_success_sent').val() !== originalValue) 
    $('#acf_success_sent').trigger('change'); 
}, 100); 

如何設置「originalValue」取決於您的應用程序。例如,您可以保留一個單獨的「.data()」值,並且每當您保存的值與當前的「值」屬性不同時,請留意。或者你可以保留在關閉變量的值:

var watchdog = (function() { 
    var $acfSuccessSent = $('#acf_success_sent'), cachedValue = $acfSuccessSent.val(); 
    return function() { 
    if (cachedValue !== $acfSuccessSent.val()) 
     $acfSuccessSent.trigger('change'); 
    }; 
})(); 
+0

originalValue將始終爲0,除非表單被髮送,所以我可以把!==「0」)我猜?!我會嘗試一下。謝謝 – tcnarss 2011-06-11 11:33:01

+1

是的,如果你知道原始值,並且你只關心那些變化,那麼你可以簡化。當然,爲了變得更簡單,您可以在定時器例程本身中完成所有工作:-) – Pointy 2011-06-11 11:36:32

+0

它第一次工作。非常感謝你,現在購買一本jQuery書,我厭倦了這麼蹩腳。 – tcnarss 2011-06-11 11:40:26