2013-12-11 59 views
0

在下面的example中,有一個簡單的輸入欄和一個按鈕。jquery有時會改變事件防止點擊事件

<body> 
    <input type="text" id="in"> 
    <input type="button" value="click" id="button"> 
    </body> 

在輸入欄上有一個改變事件功能,按鈕上有一個點擊事件功能。

$(document).ready(function() { 
     $('#in').change(function() { 
     console.log('change event'); 
     //window.alert('change event'); 
     }); 
     $('#button').click(function() { 
     console.log('click event'); 
     }); 
    }); 

在改變輸入字段的值,並立即單擊按鈕(不留光標),我的期望是,這兩個事件被觸發。不幸的是,這種行爲取決於在改變函數內執行的代碼,例如在取消註釋window.alert行時,不會觸發click事件 - 或者不執行click事件功能。爲什麼?我該如何避免代碼阻止點擊事件功能的執行?

更新: 替代window.alert,該jquery.hide有same effect

$(document).ready(function() { 
     $('#in').change(function() { 
     console.log('change event'); 
     $('#hide').hide(); 
     }); 
     $('#button').click(function() { 
     console.log('click event'); 
     }); 
    }); 
+0

alert()是模態的,這是解釋它 –

+1

因爲你沒有實際點擊按鈕。而是留下輸入,然後瀏覽器立即凍結,等待您單擊警報上的確定按鈕。雖然它是*凍結*或*封鎖*,您無法與網頁互動。要修復它,請不要使用警報。 –

+0

還在遊蕩,你在找什麼? – anand4tech

回答

0

如果你想火雙方兩個事件,你可以這樣做:

$(document).ready(function() { 
     $('#in').change(function() { 
     console.log('change event'); 
     window.alert('change event'); 
     $('#button').click(); 
     }); 
     $('#button').click(function() { 
     console.log('click event'); 
     }); 
    }); 
+0

只有這樣才能解決問題,如果我知道點擊了哪個按鈕,或者如果 - 例如在剝離的示例中 - 只有一個按鈕。不幸的是,這種情況並非如此。 – Meise2000

+0

對不起你是什麼意思「哪個按鈕」?這是一個ID#按鈕,所以它是唯一的,你必須知道它。 – HICURIN

+0

是的,在上面的例子中,我可以解決它。但在我的情況下,有許多按鈕和許多輸入字段。我只是想讓你知道細節,並且我清除了這個例子。 – Meise2000

0

嘗試

$(document).mousedown(function(e){ 
    console.log('click event'); 
}); 

mousedown事件將在文本框更改並單擊事件之前發生,以便您需要設置超時並根據需要檢查文本框的更改值。