我的代码位于下方,此处:http://jsfiddle.net/fRpCy/
var input = [];
input.push($('input'));
$(input).live('keydown', function (event) {
console.log('You have pressed a key!');
});
我希望这段代码能够响应控制台中的按键。出于某种原因,它没有。这段代码有什么问题? (注意:我知道如何解决它,我只是不知道它有什么问题!)
答案 0 :(得分:2)
您的代码期望$()
函数将jQuery对象数组作为参数。你基本上有这个:
$([$('input')])
每this jQuery documentation,我认为它不支持。 jQuery函数将采用:
需要注意的是,它不会占用jQuery对象数组。元素数组与jQuery对象数组不同,但如果您真的想要使用makeArray()
方法从jQuery对象获取元素数组。
有几种方法可行:
最简单的是不保存任何中间值:
$('input').live('keydown', function (event) {
console.log('You have pressed a key!');
});
这个实际的DOM元素到输入数组中,所以输入数组是jQuery函数支持的一种数组(尽管我认为没有理由实际使用这个代码):
var input = [];
input.push($('input').get(0));
$(input).live('keydown', function (event) {
console.log('You have pressed a key!');
});
或者,如果有多个输入值,只需保存jQuery对象以供将来使用:
var inputs = $('input');
inputs.live('keydown', function (event) {
console.log('You have pressed a key!');
});
或者,如果你想要一个元素数组,你可以这样:
var input = $('input').makeArray();
$(input).live('keydown', function (event) {
console.log('You have pressed a key!');
});
或者,如果您真正拥有的是一组jQuery对象,并且您希望将它们组合到一个新的单个jQuery对象中,这是一种方法:
// var input is an array of jQuery objects you already have
var allElements = []; // new empty array of DOM elements
// iterate over array of jQuery objects getting array of DOM elements from each
for (var i = 0; i < input.length; i++) {
allElements = allElements.concat($.makeArray(input[i]));
}
$(allElements).live(...)
或者,更简单的方法:
var items = $.map(input, function(item, index) {return($.makeArray(item));});
$(items).live(...)
或者,现在我在jQuery对象上找到了.add()方法:
var $items = input[0]; // grab first jQuery object in array
for (var i = 1; i < input.length; i++) {
$items.add(input[i]); // add other ones onto it
}
$items.keydown(function() {...});
顺便说一句,我发现DOM元素数组不能与.live('keydown')一起使用。我不知道为什么。它适用于:
$(items).keydown(...)
并且,由于您已经存在一个DOM元素数组,因此无论如何都没有理由使用.live()
。您可以使用.keydown()
。
jsFiddle在这里工作:http://jsfiddle.net/jfriend00/qen2m/。
答案 1 :(得分:0)
非常确定你需要添加.each来遍历对象数组
jQuery.each(arr, function() {
$(this).live('keydown', function (event) {
console.log('You have pressed a key!');
});
});
答案 2 :(得分:0)
看起来你正在创建一个包含单个元素的数组(var input
)。元素0包含一个数组 - 由$('input')返回 - 因为你的页面几乎肯定有多个输入。
你能试试吗
$('input').live('keydown', function (event) {
console.log('You have pressed a key!');
});
(未测试的)