2011-12-03 53 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