0

まず、SOですぐに答えが見つからないことに少し混乱しています。コードスタイルについての質問です。

例を考えてみましょう:

$('input[type=text]').on('click', doSomething);

ページに入力がない場合はどうなりますか? このセレクターの結果は のように見えnull、エラーが発生します。

そのため、コードを大きく醜くする必要があります。

var inputs = $('input[type=text]');

if (inputs) {
    inputs.on('click', doSomething);
}

私は jQuery が大好きで、このソリューションのよりエレガントで短い形式を期待しています。


アップデート

この問題の原因はprototype.js、ページ上のサードパーティ スクリプトに含まれていました。SO に投稿する前に、サンドボックスで問題をテストする必要がありました。

4

4 に答える 4

7

jQuery セレクターは常に jQuery オブジェクトを返し、null を取得することはありません。

$('#Not exist!').attr('foo', 'foo'); //no error, returns jQuery

とは異なりdocument.getElementById:

document.getElementById('Not exist!') == null
于 2013-02-28T18:06:19.687 に答える
2

一致が見つからない場合、セレクターは実際には戻りnullません。これは意図的なものであり、チェーンが壊れないようになっています。これは、jQuery の "少ない書き込みで多くのことを行う" というモットーに沿ったものです。

これを説明するために jsFiddle を作成しました。ブラウザで開発者ツールを開き、コンソールを確認します。

var doSomething = function(){};
$('input[type=text]').on('click', doSomething); //No error

//...because this:

var obj = $('input[type=text]'); //is a jQuery object, even 
                                 //though there are no <input> elements

console.dir(obj); //Inspect the console. you get: jQuery.fn.jQuery.init[0]

それが理にかなっていることを願っています。あなたの例では前者を単純に行うことができます:

$('input[type=text]').on('click', doSomething);
于 2013-02-28T18:11:37.550 に答える
1

エラーはなく、空のオブジェクトです。あなたは一緒に行くことができます

$('input[type=text]').on('click', doSomething);
于 2013-02-28T18:08:08.110 に答える
0

これが機能することを願っています...

$('input[type="text"]').on('click', doSomething);
于 2013-02-28T18:26:22.680 に答える