当我触发一个事件时,它会被触发几次,而不是在jQuery中的输入时触发一次

When I trigger an event, it is fired few times instead one time on input in jQuery

本文关键字:jQuery 一次 输入 一个 事件 几次      更新时间:2023-09-26

我有以下HTML代码,简单的一个:

<input type="text" />
<input type="hidden" />
<input type="button" value="ok" />

和javascript:

$(function(){
    $(":text").on("keyup", function(){
        $(":hidden").val($(this).val()).trigger("propertychange");
    });
    $(":hidden").on("propertychange", function(){
       alert($(this).val()); 
    });
    $(":button").on("click", function(){
        alert($(":hidden").val()); 
    });
});

当我在输入类型text中键入某个内容时,警报会显示几次,而不是一次。

如何修复?

请参阅jsFiddle。(我用Firefox检查过)

您的:hidden选择器实际上匹配8个元素(包括<head><title><script>),而不是仅匹配隐藏的输入,因此每个元素都会引发propertyChange事件。

来自jQuery隐藏文档:

在一些浏览器中:隐藏包括标题、标题、脚本等…

试试这个:

$("input:hidden").on("input propertychange", function(){
   alert($(this).val()); 
});

试试这个,

$(function(){
$(":text").on("keyup", function(e){
    e.preventDefault();
    $(":hidden").val($(this).val()).trigger("propertychange");
   alert($(this).val()); 
});
$(":hidden").on("input propertychange", function(){
});
$(":button").on("click", function(){
    alert($(":hidden").val()); 
});
});

将任何类或ID应用于隐藏,由于使用fiddle,它也在访问其他一些隐藏对象。请尝试以下代码。

$(function(){
    $(":text").on("keyup", function(){
        $(".md:hidden").val($(this).val()).trigger("propertychange");
    });
    $(".md:hidden").on("input propertychange", function(){
       alert($(this).val()); 
    });
    $(":button").on("click", function(){
        alert($(".md:hidden").val()); 
    });
});

我更新了你的小提琴检查这个[fiddle](http://jsfiddle.net/gkvgzc5p/2/)