javascript - 为什么 jQuery.val() 的行为与 jQuery 的其余部分不同

标签 javascript jquery api default-value

通常在 jQuery 无法使用其选择器找到匹配元素的情况下,默认值绝不是异常(exception),而是缺少操作。

我的理解是这是设计使然,以确保缺少元素不会导致错误情况。但是我发现 jQuery.val() 没有表现出同样的行为。如果所选元素不存在,jQuery.val() 将返回 undefined 而不是空字符串(这与我预期的框架的其余部分保持一致)。

那么为什么 jQuery.val() 是框架其余部分的异常(exception),什么是改变这种行为的最佳方式?

最佳答案

这里的关键是 jQuery 方法的可链接性。 A jQuery method doesn't return undefined when a selector doesn't match anything because it would break the chain.考虑:

$( '#doesntExist' ).addClass( 'foo' ).fadeIn();

如果不匹配任何内容的选择器将返回 undefined 它会破坏链,因为 undefined 没有自己的任何方法。现在,无论是否找到元素,每个方法都会执行(并且什么都不做)。

.val() 另一方面是不同的,因为它的目的是返回元素的值。与许多其他 jQuery 方法不同,它根本不链接,因为方法必须返回一个 jQuery 对象才能链接。例如,$( '#foo' ).val().addClass( 'bar' ) 不起作用无论元素 #foo 是否存在或不是

在这种情况下,让 .val() 返回一个空字符串将不再符合可链接方法,因为当找不到该元素时,其他方法也不会返回一个空字符串,并且返回 undefined 不会破坏可链接性,因为该方法一开始就没有链接。

(顺便说一句,对于每个返回值的方法都是如此,比如 .css().data()。)

通常了解元素的值是否为空或元素是否根本不存在更有用,但如果您希望始终返回一个字符串,您可以添加自己的方法:

$.fn.stringVal = function() {
    return( this.val() || '' );
};

关于javascript - 为什么 jQuery.val() 的行为与 jQuery 的其余部分不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11337070/

相关文章:

javascript - 同步发射事件是否不正确?

javascript - 删除数组元素

Jquery,如果 optgroup 不包含

java - 如何使用 Flickrj api 向 Flickr 发送简单的 ping 测试

Javascript 字符串赋值给键值字符串

javascript - 使用 jQuery 在页面上提交 1 个 Ajax 表单,其中包含多个独特的表单

javascript - 在 JS 中从 Chrome 扩展程序向我的 Rails API 发出基本请求

Javascript queryselector.style.modify "uncaught TypeError"

javascript - Uncaught Error : NotFoundError: DOM Exception 8?

javascript - 我的查找最长单词的代码不起作用