0

首先,我有点困惑,我无法在 SO 上立即找到答案。问题是关于代码样式。

考虑一个例子:

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

如果页面上没有输入会发生什么?这个选择器的结果似乎是null,我们得到一个错误。

所以,我们必须让代码更大更丑:

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

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

我喜欢 jQuery,并且期待这个解决方案的更优雅和更简短的形式。


更新

此问题的原因是prototype.js页面上的 3 方脚本包含。道歉,我应该在发帖之前在沙箱中测试问题

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 回答