4

通常、jQueryがセレクターを使用して一致する要素を見つけられない場合、デフォルト値は例外ではなく、アクションの欠如です。

私の理解では、これは要素の欠如がエラー状態を引き起こさないことを保証するために設計によって行われています。しかし、私はそれjQuery.val()がこれと同じ振る舞いを示さないことを発見しました。選択した要素が存在しない場合は、空の文字列ではなくjQuery.val()返さundefinedれます(これは、フレームワークの残りの部分と一致していると思います)。

では、なぜjQuery.val()フレームワークの残りの部分に例外があり、この動作を変更するための最良の方法は何でしょうか?

4

3 に答える 3

6

ここで重要なのは、jQueryメソッドの連鎖性です。セレクターが何にも一致しない場合、 jQueryメソッドはundefinedチェーンを切断するため、戻りません。検討:

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

何にも一致しないセレクターが返される場合、独自のメソッドがないundefinedため、チェーンが切断されます。undefinedこれで、要素が見つかったかどうかに関係なく、すべてのメソッドが実行されます(そして何もしません)。

.val()一方、要素の値を返すことが目的であるため、異なります。他の多くのjQueryメソッドとは異なり、チェーンすることはできません。これは、メソッドがチェーンできるようにするには、jQueryオブジェクトを返す必要があるためです。たとえば、要素が存在する$( '#foo' ).val().addClass( 'bar' )かどうかに関係なく機能しません。#foo

この観点から.val()、空の文字列を返すと、チェーン可能なメソッドと一致しなくなります。要素が見つからない場合、他のメソッドが空の文字列を返すことはなく、undefinedを返すと、メソッドがチェーン可能性を壊さないためです。そもそもチェーン。

(ちなみに、.css()andなどの値を返すすべてのメソッドについても同じことが言えます.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 に答える