javascript - preventDefault() 和单选按钮的奇怪行为

标签 javascript jquery onclick radio-button preventdefault

查看这个 jsFiddle:

http://jsfiddle.net/nathanfriend/vAcpc/9/

似乎 preventDefault() 方法不会阻止单击的单选按钮切换(请注意消息总是 说“已选中此单选按钮”,无论其先前状态如何)。但是,在 onclick() 方法完成后,单选按钮会快速回到其初始状态(第一次选择单选按钮时除外)。

preventDefault() 似乎并不是通过实际阻止单选按钮被选中来工作的,而是通过将按钮集返回到它们之前的状态来工作的。谁能解释这种行为?我希望能够完全防止单选按钮被切换——这样我就可以准确地检查单选按钮是否在其 onclick() 方法中被选中。有任何想法吗?

最佳答案

实际上 mousedown 事件将首先触发并检查您的单选按钮。您可以通过在单选按钮上按住鼠标按钮来轻松验证这一点。但是,几乎所有 GUI 元素只有在 mousedownmouseup 都被触发并成功运行时才会执行或更改。

请参阅此示例 ( demo):

$(function() {
    $('[name="test"]').each(function() {
         $(this).mousedown(function(e) {
            e.preventDefault();
            if ($(this).is(':checked')) {
                alert('This radio button was checked in mousedown');                
            } else {
                alert('This radio button was not checked in mousedown');
            }                    
        });
        $(this).click(function(e) {
            e.preventDefault();
            if ($(this).is(':checked')) {
                alert('This radio button was checked');
            } else {
                alert('This radio button was not checked');
            }                    
        });
    });           
});

如您所见,mousedown 首先被触发,它会提示“此单选按钮未在 mousedown 中选中”。 click 事件被阻止,因为实际的 mouseup 事件被讨厌的警报取消了。但是,如果您使用 console.log您会注意到 click 仍在执行,单选按钮实际上仍处于选中状态。

但是,如果您check for active radio buttons你会注意到没有一个是活跃的。 click 元素的行为有时令人恼火,但 e.preventDefault() 会完成它的工作,不用担心。

关于javascript - preventDefault() 和单选按钮的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10118052/

相关文章:

javascript - 如何在点击时做一个下拉菜单

jquery - 第二个 Action 在点击时不起作用

android - 更改 ListView 的背景颜色会禁用突出显示颜色

javascript - 对选择元素选项进行排序并保留焦点

javascript - CSS/JS slider 过渡效果

javascript - grunt.js - 将 javascript 连接到函数调用中

javascript - Article.createdAt.toLocalDateString 不是函数

javascript - jQuery 检索哈希并将其用作 ID

php - Wordpress Ajax 用于搜索结果 - 查询仅返回 1 个结果

javascript - 检测用户何时使用 jQuery 滚动到 div 的底部