【问题标题】:jQuery change event not firing for input fieldjQuery更改事件未触发输入字段
【发布时间】:2015-03-06 15:43:42
【问题描述】:

当用户修复空字段时,我正在尝试删除表单上的警报。 我的通用代码适用于用户必须在字段中键入的所有输入元素,但是如果系统将日期放置在字段中,我的具有弹出日历的输入不会触发“更改”事件。我认为当字段失去焦点时会触发 change 事件?

        $("#my_input").change(function() {
            $(".StatusBox").html("");
            $(this).unbind("change");
        });

我有另一段代码在此之后运行并更改输入字段(用户单击日历日期并因此更新输入)。那不应该触发 change 事件吗?

【问题讨论】:

  • 随后运行的代码无法触发更改事件,因为此例程unbinds 更改事件。是我理解错了,还是需要澄清一下?
  • 当某些东西发生变化时触发 change 事件,比如用户输入了一个字符。模糊事件发生在失去焦点时。你怎么知道你的 change 事件没有被触发?你在里面放了一个console.log吗?
  • 解除绑定仅在更改触发后发生,这也会清空我的错误消息状态框。我知道两者都没有发生,因为我的错误消息仍在显示。
  • @JayMcVety 您可能需要一个console.log 或警报来确保。如果这个选择器 $(".StatusBox").html("");不好,它不会清除它,它可能只是假设它没有触发。
  • 是的,我删除了 console.log 语句以使其更短。我决定在用户​​单击日历中的日期后手动触发“更改”事件。更简单。并且状态框会清除所有其他输入字段,而不是在没有用户键入数据的情况下系统更新输入的情况。

标签: jquery events


【解决方案1】:

您可以通过trigger('change') 方法以编程方式强制更改事件:

$('#elementID').trigger('change');

当然,这假设$('#elementID') (仍然) 绑定到更改事件...

【讨论】:

  • 这行得通。当用户单击日期时,我将手动触发更改。谢谢!
  • @JayMcVety 我在您最初的帖子中完全忽略了一个事实,即填充该字段的是 JavaScript。当 JavaScript 更改字段时,您总是需要这样做。除非用户正在更改,否则浏览器不会触发更改事件。
【解决方案2】:

使用这样的东西,它总是有效的。

$(function() {
    $("#my_input").on("change paste keyup", function() {
       alert($(this).val()); 
    });
});

【讨论】:

    【解决方案3】:

    你试过使用 $("#my_input").on('change', function ... 吗?

    它的工作方式与 bind 略有不同,您可以将它放在一个函数中,以便为按需创建的新对象重新运行(因此,它不一定必须位于 "准备好”声明)。

    【讨论】:

    • Julio 是对的,这也可以正常工作,只是示例在页面加载后进入时不会拾取输入。选择器必须位于存在的静态对象上。做类似 $(document).on('change', '#my_input', function() { });会完成的。
    • 感谢保罗补充回答。事实上,我想到了“事件”->“选择器”程序,但由于我的一些分心,我也没有指出这个想法。很棒的收获! ;)
    【解决方案4】:

    您可能在元素加载到页面之前附加了事件。也许尝试这样做让页面在附加事件之前完成加载

    $(function() {
    
        $("#my_input").change(function() {
                 $(".StatusBox").html("");
                 $(this).unbind("change");
         });
    });
    

    【讨论】:

    • 我只是在用户提交表单并检查空字段后绑定更改事件。肯定是在页面加载之后,并且显示我的字段为空的错误。
    • 我在页面加载时绑定了我的文件输入字段,这个建议解决了我的问题。谢谢
    猜你喜欢
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    相关资源
    最近更新 更多