2011-03-09 85 views
6

我將不勝感激關於使用$(this)[0] .defaultValue確定文本框值是否與原始值例如

//keyUp event 

if($(this)[0].defaultValue != $(this).val()) 
{ 
    //Field has been modified mark as dirty 
} 

在Chrome中,它似乎會生成所需的輸出,因爲defaultValue始終是文本框被加載到DOM中的原始值。不過,我最近纔在Chrome開發工具中的DOM對象爬行後發現了這個值,尋找完全不同的東西,我擔心它可能會帶來一大堆問題。此外谷歌沒有多大的關注我更多...

任何反饋非常感謝。

乾杯 羅布

回答

7

這似乎是相當安全的。我只是使用這個小提琴:http://jsfiddle.net/rXsrQ/,並通過Chrome/Firefox 3.6/Safari 4/ie8測試它們,它們都表現相同。

它在這裏描述:https://developer.mozilla.org/en/DOM/HTMLTextAreaElement並沒有關於兼容性問題的通知。

它也在這裏描述:http://msdn.microsoft.com/en-us/library/ms533718(v=vs.85).aspx似乎與ie 5兼容,所以我似乎並不認爲它應該是安全的使用。

+1

感謝我要發表我的意見,因爲你的答案更直接針對原來的問題的答案。 @jAndy - 如果可以的話,我會正確地標記你的,因爲你的回答提供了一個很好的選擇。 – Rob 2011-03-09 11:13:38

3

.defaultValue是非標準的,因此沒有在任何W3C draft/specifications中提及。如果您負責呈現HTML標記,則屬性似乎是一種非常方便的方式,可以使所需行爲跨瀏覽器。

所以,你可以使它像

<input type="text" value="foo" data-default="foo" /> 

jQuery將抓住這些data-屬性和部分後面-存儲在其數據關鍵擴大對象該特定節點。這意味着你可以通過調用

$('input').data('default') // === 'foo' 

訪問這些值:http://jsfiddle.net/zAuPf/

+0

我喜歡這兩個答案 - 原諒我的無知,但這仍然工作在一個非Html5兼容的瀏覽器 - 我的猜測是肯定的,因爲對於jQuery它只是另一個屬性?我渴望進入HTML5,但我必須剋制自己,並在我開始「玩」之前完成當前的項目。此外,我需要此解決方案的網站部分隱藏在搜索引擎之外,因此我不關心w3c合規性與潛在的SEO處罰有關,這些處罰似乎仍然與空氣質量有關過渡到HTML5。因此,這可能是一個強大的替代品 – Rob 2011-03-09 11:12:07

+0

@DrRob:是的,這也適用於非HTML5瀏覽器。 – jAndy 2011-03-09 12:08:10

+0

再次感謝 - 我實際上跟你一起選擇,它的工作很好 - 我決定我想在複選框上使用$(this)[0] .defaultValue並且低 - 看它似乎不工作 - 我一直在「true」作爲默認值,不管它是什麼原始狀態。 – Rob 2011-03-09 12:50:51