2011-12-03 54 views
0

從我的previous question開始: 使用jQuery可以比較選擇器中的兩個屬性嗎? 我的意思是這樣:jQuery選擇器比較它們之間的元素屬性(和/或屬性)

$('element[atribute1!=attribute2]') 

,或者在一個實際的例子:

$('input[name!=id]') 

以我爲例,我需要它來獲取多少輸入字段在HTML表單沒有改變用於編輯的東西, 我正試圖獲得此代碼工作:

if($('input[DefaultValue!=input.value]').lenght==0){...} 

什麼呢? 它應該返回更改字段的數量(如果我得到0我將停止表單提交,顯示一條警告消息,並返回而不更新)

感謝您的幫助。

+0

只是好奇..你試過了嗎? – simshaun

+0

是的...代碼似乎沒有正常工作(表單提交繼續),但我沒有得到錯誤通知(使用Firefox 8 + webdeveloper插件) – danicotra

+0

我不能編輯我以前的評論,所以請回復:我不僅首先打亂了「長度」這個詞,然後我甚至發現了CHEERED TOO SOON,'導致我的代碼對我所意圖達到的目標而言仍然是錯誤的(現在我總是得到好像修改過的元素的數量等於0 )。謝謝RightSaidFred,會試試你的代碼。 – danicotra

回答

4

號如果你通過jQuery的文件,你會看到有沒有這樣的選擇。

另外defaultValue是屬性,而不是屬性。

你可以這樣做:

var changed = $('input').filter(function() { 
    return this.value !== this.defaultValue; 
}); 
+1

Hello there RightSaidFred ...謝謝你的回覆。是的,這是真的,我沒有發現任何有關使用jQuery的方式......它似乎工作,但我意識到我總是收到消息「你沒有修改數據」,所以我要編輯我以前的評論。謝謝。 – danicotra

+0

你的代碼工作得很好,謝謝! 我只是有最後一個問題:如果我改變這一行 '變種改變= $( '輸入[名稱^ = 「modcc _」]')過濾器(函數(){' 這個 '變種改變= $('input [name^=「modcc_」]',myForm).filter(function(){' 我總是得到好像我沒有改變任何東西......我確信myForm是字符串「#formMod」(與我的表單id相同,即id =「formMod」) – danicotra

+0

@danicotra:不確定爲什麼會這樣。你確定這些輸入是在formMod裏面嗎?一個具有相同ID的元素? – RightSaidFred

1

可以使用jQuery filter()功能,像這樣:

var different = $('input').filter(function() 
{ 
    return $(this).attr('data-default-value') != $(this).val(); 
}); 

然後,您可以測試different.length > 0

這裏是一個完整的工作示例:http://jsfiddle.net/us47d/

+0

你的代碼似乎不工作,我總是得到好像我改變了我所有的表單輸入字段! – danicotra

+0

我的jsfiddle示例正常工作。如果您的實現有所不同,請發佈您的源代碼。 – wsanville

+0

我明白了......事實是我沒有把data-default-value屬性放到我的輸入中......有些問題適合你:1它是一個「標準的」html/xhtml屬性嗎? (從來不知道)2我認爲我會採用權利保護的方式(否則我應該修飾我所有的輸入字段......),您認爲使用您的輸入字段有很多優勢嗎? ...和3,請你能回覆我最後一個關於權利援助答案的評論嗎?謝謝。 – danicotra