【问题标题】:preventDefault() not working for change eventpreventDefault() 不适用于更改事件
【发布时间】:2014-06-16 20:48:38
【问题描述】:

任何想法为什么 preventDefault 不起作用?这是下面的代码。 . .谢了!

<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">

    $(document).ready(function() {
        $("#text1").change(function(e) {
             e.preventDefault();
        });
    });

function myFunc() {
    alert("Random, annoying alert");
}

</script>
</head>

表单中只有一个 HTML 元素:

<body>
<form name="test" method="post">
    <input name="text1" id="text1" type="text" onchange="myFunc();">
</form>
</body>

【问题讨论】:

  • 你的意思可能是$("#text1")
  • 您的示例中有一些错误,您实际上希望防止什么默认值?
  • 您是否试图阻止显示“随机、烦人的警报”?您是否假设 myFunc() 是您要阻止的默认设置?
  • 这里运行良好:jsfiddle.net/mxt2B
  • @blgt 但这不是 OP 想要发生的事情......

标签: javascript onchange preventdefault


【解决方案1】:

您不能在更改事件上使用preventDefault,因为它不可取消:

$("#text1").change(function(e) {
    alert(e.cancelable?"Is cancelable":"Not cancelable");
});

cancelable 属性仅在可以阻止的事件上为真。

【讨论】:

  • 非常感谢。有时,最容易出现问题的是显而易见的东西!
  • 那么如何预防呢?
  • @Triynko 您必须阻止实际更改输入的value 的事件。 change 表示“输入会话”的结束。它表示某事已经发生,而不是某事正在发生。在change 被触发时,value 已经被更改。如果要拦截对输入的value 的更改,则必须防止例如inputclick,取决于输入类型。或者,您可以将输入的先前值存储在您自己的状态管理中,如果您不想保留更改,您可以在 change 事件之后自行恢复该值。
【解决方案2】:

preventDefault() 用于防止元素的默认行为,该默认行为已嵌入到您的浏览器中。

例如,单击锚标记时的行为是启动一系列事件,这些事件将修改 url 栏并发送 http 请求(我知道的解释过于简单)。

通过在点击事件中使用evt.preventDefault(evt),您可以停止默认行为,以便您可以在执行该行为之前执行其他操作,或者将其全部忽略。

我可以在您的示例中看到的问题是 onchange 的默认行为是取消选择输入框,取消突出显示它,我不确定它是否被归类为事件(我很确定它不是) .不是因为它能够停止您附加onchange() 的功能。事实上,如果你要使用preventDefault()myFunc() 正是它应该在的位置。

对于要阻止的事件,必须有一个结果输出,而不是修改外观。例如a标签的点击,表单的提交,容器的滚动。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-03
    • 2012-09-24
    • 1970-01-01
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    相关资源
    最近更新 更多