2015-02-11 21 views
1
發射幾次,而不是一個時間上的輸入

我有以下的HTML代碼,簡單的一個:當我觸發一個事件,它在jQuery的

<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。 (I與Firefox選中)

+2

使用時應使用''triggerHandler''而不是''trigger'' – Gowri 2015-02-11 07:24:33

+0

非常好,對點 – 2015-02-11 07:27:11

回答

7

:hidden選擇器實際上是匹配的8個元素(包括<head><title><script>),而不是僅隱藏的輸入,因此propertyChange事件引發了每一個。

從jQuery的hidden文檔:

在某些瀏覽器:隱藏包括頭部,標題,腳本等等

試試這個:

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

也感謝工作,如果使用'triggerHandler'而不是'觸發器「(見gowri的評論) – 2015-02-11 07:26:44

+0

隱藏的好處,我從來沒有想過不可見的元素。 – 2015-02-11 07:29:09

0

嘗試此,

$(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()); 
}); 
}); 
0

任何申請類或ID隱藏,由於使用小提琴,它也訪問一些其他隱藏的對象。嘗試下面的代碼。

$(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()); 
    }); 
}); 
+0

不需要放置類名稱,就足以指定標籤名稱,比如'input'或'select'或其他什麼 – 2015-02-11 07:29:45

+0

Yeap,您可以這樣做,但添加類會讓生活變得輕鬆。 – 2015-02-11 13:55:01

0

我更新了小提琴支票本[fiddle](http://jsfiddle.net/gkvgzc5p/2/)