我有一個表單,用於檢測所有文本字段在每個keyup()和focus();上是否有效。如果它們都是有效的,它將啓用用戶按下的提交按鈕。但是,如果用戶使用瀏覽器自動填充功能填充其中一個文本輸入,則會阻止啓用提交按鈕。使用jQuery檢測表單輸入上的自動完成
有沒有辦法來檢測是否有任何輸入已經改變,無論如何改變,使用jQuery?
我有一個表單,用於檢測所有文本字段在每個keyup()和focus();上是否有效。如果它們都是有效的,它將啓用用戶按下的提交按鈕。但是,如果用戶使用瀏覽器自動填充功能填充其中一個文本輸入,則會阻止啓用提交按鈕。使用jQuery檢測表單輸入上的自動完成
有沒有辦法來檢測是否有任何輸入已經改變,無論如何改變,使用jQuery?
jQuery更改事件只會觸發模糊。鍵入事件將在您鍵入時觸發。點擊自動完成選項時不會觸發。我也尋找一種方法來檢測這一點,但我目前正在
$(selector).bind("change keyup",function(){
//Do something, probably with $(this).val()
});
去,但它並不完全解決問題...
到目前爲止,我已經用'change' +'keyup'獲得了相當不錯的結果。 – kgrote 2015-04-03 18:05:00
解決方案是[this](http://stackoverflow.com/a/8548572/1057527)。 – machineaddict 2016-03-04 07:50:49
我不幸得不得了!我有90%使用'change keyup'的好經驗,但keyup並沒有附加到chrome-case中的自動填充,只有在焦點丟失的情況下'change'附加到自動填充** ** Chrome有時會將textcursor保留在輸入字段內自動填充後,並沒有觸發變化事件!也許一個只有鉻的問題... – 2016-07-17 10:35:09
您可以使用jQuery .change()
函數。
頁面初始加載後,您可以驗證整個表單,只是爲了檢查它是否實際上沒有填寫。之後,您可以使用.change()
檢查表單上的事情是否發生了變化,並且是否有更改,再次驗證表單。
$(document).ready(function() {
// validate form once, just to be sure (if valid, activate submit button)
});
...
<form>
<input class="target" type="text" value="Field 1" />
<select class="target">
<option value="option1" selected="selected">Option 1</option>
<option value="option2">Option 2</option>
</select>
</form>
<script type="text/javascript">
$('.target').change(function() {
alert('Something changed');
// Try validating form again (if valid, activate submit button)
});
</script>
B計劃
另一種選擇是總是有提交按鈕點擊,但使用.submit()
將其綁定到窗體驗證。那麼如果表格是有效的,繼續。如果表單無效,請使用.preventDefault()
停止提交表單.....並且您還會顯示一條警告消息,指出缺少的字段。
答案已經this問題被給予。它不使用jQuery,但它適用於自動完成:
使用js onpropertychange
事件。
我有一個體面的解決方案後,有同樣的問題。將keyup設置爲正常的表單域,然後將鼠標懸停在周圍的div上。所以一旦你點擊自動完成選項,你的鼠標將超過div的頂部:
$("#emailaddress").bind("keyup", function() {
displayFullSubcribeForm();
});
$(".center_left_box").bind("mouseover", function() {
displayFullSubcribeForm();
});
許多用戶不使用鼠標 - 它們要麼標籤來關注字段,要麼點擊它。 – goat 2017-06-18 18:57:55
我的問題是檢測自動填充(通過像LastPass的或的1Password一個插件),以及上述的問題。
爲我工作的解決方案是:
$(function(){
function validate(){
if($('#email').val() !== '' && $('#password').val() !== '')
$('#submit').prop('disabled', false);
else
$('#submit').prop('disabled', true);
}
// Validate after user input
$('#email, #password').on('keyup change', validate);
// Validate on mouse enter of body and login form
// to catch auto-fills from roboform/1password etc...
$('body, #loginform').on('mouseenter', validate);
// Validate onload incase of autocomplete/autofill
validate();
});
我知道這是舊的,但你不能'''$(「#email,」#password「)。on(」keyup change「,validate);'''而不是? – eytanfb 2014-08-26 17:37:00
是的,謝謝指出我更新了我的答案 – Justin 2014-08-26 19:52:45
作爲僅供參考 - mouseenter被觸發時出現在懸停中,雖然這可能適用於密碼管理器,但它看起來並不理想,因爲它會觸發懸停時的驗證並且該字段無效(變成紅色)。這是挑剔的,但我不希望在懸停事件中給出負面的反饋,仍然在尋找獨角獸事件來檢測最後通過fill_in – kross 2015-03-17 15:08:54
您可以嘗試使用on input
來檢測<input>
中基於文本的更改(除ctrl
和shift
之外的密鑰)。
例如:
$(input).on('input', function() {
console.log($(this).val());
});
當IE瀏覽器已經在頁面上填充了憑據時,輸入在IE11中不起作用加載。 – 2016-11-21 08:07:59
我想上一個字段,它不會是無效的(把我的情況紅)一個非常好的用戶體驗,只要用戶是相當活躍的如仍然填補了該領域。
要正常輸入,我可以用debounce
函數連接到keyup
,而blur
連接立即驗證。雖然看起來keyup
是由lastpass觸發的,但由於我已將其去抖,所以驗證延遲了。感謝@ peter-ajtai,我試圖添加change
事件,它確實捕獲了最後一個通行證,並使其他細節單獨存在。
CoffeeScript的例子:
@fieldExp .keyup($.debounce(@_onExpChange, 3000)) .blur(@_onExpChange) .change(@_onExpChange)
這種運作良好,LastPass的形式填充觸發立即驗證。
自己,我用
$(selector).on("change keyup blur input", function() {});
這奏效了Chrome瀏覽器。 input
是什麼使它適用於自動完成。
在Chrome中無法使用可靠性。如果我快速雙刷新頁面,那麼這不會捕獲自動完成值。 – 2017-03-28 10:23:46
這是最終的溶液中,保證工作
$(document).bind('mouseover', function(){
liveValidate();
});
也適用於手機? – EricC 2017-01-20 10:30:25
這裏是針對此問題=> [此](http://stackoverflow.com/a/36708876/2805103) – 2016-04-19 19:16:57
退房溶液我回答[這裏](http://stackoverflow.com/a/41530164/3952799) – 2017-01-08 06:37:41