首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >.change()仅在启用multiple时对select有效

.change()仅在启用multiple时对select有效
EN

Stack Overflow用户
提问于 2010-11-17 22:13:09
回答 3查看 82关注 0票数 0

看一下.change() jQuery函数的最后一个演示。

有人能给我解释一下为什么它可以上下移动箭头并且值发生变化,但是如果我删除了select上的multiple属性,我必须总是在它触发之前按enter键?

有没有办法解决这个问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-17 22:23:07

请记住,只有在输入元素的值发生更改时,才会发生change事件。当用户与多值选择交互时,无论是通过鼠标还是使用键盘,值都会发生更改-您可以在页面上的演示中看到这一点,因为元素的value会显示出来。

然而,对于单个值选择,当您打开下拉列表并将鼠标悬停在某个值上时,值不会更改,也不会在您使用键盘执行相同的操作时更改。因此,change事件工作正常。

如果你想“解决”这个问题,你可以随时使用keydown事件来捕捉值的变化并使用它。这是一个简单的示例,说明了这样的函数可能是什么样子:

代码语言:javascript
复制
$('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');
});

在这里看到一个简单的演示:

票数 2
EN

Stack Overflow用户

发布于 2010-11-17 22:29:06

我认为这种行为是由浏览器处理选择框上的键盘事件的方式引起的。对于单行选择字段,当值发生更改且焦点移出字段时,将触发onchange事件,方法是按enter或tab键,或者单击字段外的某个位置。这在某些情况下是有意义的:例如,如果您希望根据用户的选择将用户重定向到不同的页面,您仍然希望他能够使用箭头键在字段中滚动,而不必在每次按键后重新加载页面。

如果您显式希望在用户每次按下字段上的箭头键时都调用函数,请使用keyup事件。

票数 1
EN

Stack Overflow用户

发布于 2010-11-17 23:06:46

您将希望改用.keypress()。

页面如下:

http://api.jquery.com/keypress/

通过使用.keypress(),您将在每次按下键(鼠标或键盘)时检查该值,并且它应该可以在大多数浏览器上正常工作。

Chrome在这方面有最值得注意的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4205208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档