看一下.change() jQuery函数的最后一个演示。
有人能给我解释一下为什么它可以上下移动箭头并且值发生变化,但是如果我删除了select上的multiple属性,我必须总是在它触发之前按enter键?
有没有办法解决这个问题?
发布于 2010-11-17 22:23:07
请记住,只有在输入元素的值发生更改时,才会发生change事件。当用户与多值选择交互时,无论是通过鼠标还是使用键盘,值都会发生更改-您可以在页面上的演示中看到这一点,因为元素的value会显示出来。
然而,对于单个值选择,当您打开下拉列表并将鼠标悬停在某个值上时,值不会更改,也不会在您使用键盘执行相同的操作时更改。因此,change事件工作正常。
如果你想“解决”这个问题,你可以随时使用keydown事件来捕捉值的变化并使用它。这是一个简单的示例,说明了这样的函数可能是什么样子:
$('select').focus(function() {
var v = this.value,
t = $(this),
c = t.children(':selected'); // Store the currently selected
// option element in a variable
t.keydown(function(e) {
switch (e.keyCode) {
case 38:
case 37:
c = c.prev().length ? c.prev() : c;
break;
case 40:
case 39:
c = c.next().length ? c.next() : c;
break;
}
// Do something with this information
console.log(c.text());
});
}).blur(function() {
$(this).unbind('keydown');
});在这里看到一个简单的演示:
发布于 2010-11-17 22:29:06
我认为这种行为是由浏览器处理选择框上的键盘事件的方式引起的。对于单行选择字段,当值发生更改且焦点移出字段时,将触发onchange事件,方法是按enter或tab键,或者单击字段外的某个位置。这在某些情况下是有意义的:例如,如果您希望根据用户的选择将用户重定向到不同的页面,您仍然希望他能够使用箭头键在字段中滚动,而不必在每次按键后重新加载页面。
如果您显式希望在用户每次按下字段上的箭头键时都调用函数,请使用keyup事件。
发布于 2010-11-17 23:06:46
您将希望改用.keypress()。
页面如下:
http://api.jquery.com/keypress/
通过使用.keypress(),您将在每次按下键(鼠标或键盘)时检查该值,并且它应该可以在大多数浏览器上正常工作。
Chrome在这方面有最值得注意的问题。
https://stackoverflow.com/questions/4205208
复制相似问题