4

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

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

那么为什么jQuery.val()框架的其余部分是一个例外,改变这种行为的最佳方法是什么?

4

3 回答 3

6

这里的关键是jQuery方法的可链接性。A jQuery method doesn't return undefinedwhen 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() || '' );
};
于 2012-07-05T10:21:27.687 回答
2

如果我.val()用来获取一个项目的价值,我希望该项目存在。如果没有,我需要知道这一点。在这种情况下返回undefined似乎是最好的方法。

正如@Ricardo 所指出的,.val()在其他情况下的表现也不同,具体取决于输入。

于 2012-07-05T02:19:46.763 回答
-2

jQuery.val() 返回输入的值(或“选择”的选定选项)

于 2012-07-05T02:09:19.867 回答