jQuery中val.length和val().length之间的区别是什么?

29
< p >"$("#id").val.length"和"$("#id").val().length"有什么区别?< /p > < p >当我写"$("#id").val.length"时,输出结果是"1";而当我写"$("#id").val().length"时,输出结果是所写字符的长度。< /p > < p >这是为什么呢?< /p >

这只是 ($.fn.val).length - Bergi
请在问题与jQuery Validate插件完全无关时不要使用[tag:jquery-validate]标签。 已编辑。 - Sparky
3个回答

60

$("#id").val 返回val函数的定义,而根据length属性是指函数期望的参数个数,因为val接受一个参数(用于设置值),所以它的长度为1;而val()会调用该函数并获取返回值,对其使用 length 将返回值中字符的数量。

正确的用法是 $(selector).val().length

我还建议在检查length之前,在val()上使用 VanillaJS 的 trim 或 jQuery 的 $.trim 来移除首尾空格。


14
函数的长度指的是该函数期望的参数数量。太好了!我不知道这一点。(是的,我已经测试过了)尝试一下 (function test(one, two){}).length - AmmarCSE

9
让我们来看一下两段代码:
Case 1:
$("#id").val.length

这里的 .val() 返回方法定义,而 .length 则返回该方法接受的最大参数数量(例如 .toggleClass() 接受 2 个参数)。

案例 2:

$("#id").val().length

在这里.val()返回方法评估结果,即DOM对象的字符串格式的值,而.length返回返回长度的字符串值。

正确的方式:

Case 2是使用.val()以及长度的正确方式,因为它返回与其关联的元素值的长度。


1
由于方法参数的数量为1,因此.length返回的是1并不正确。方法参数的数量是1 - Agop

1
使用 $("#id").val 可以获取函数(源代码),而使用 $("#id").val() 则会调用并执行该函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接