2016-11-30 65 views
1

我有一種情況,我想驗證輸入到輸入文本字段中的文本。這是HTML代碼:使用jQuery輸入文本驗證

<div id="err_title" style="display:none;">Please enter a valid Number.</div> 
<input type="radio" id="txt_a-radio" value="valueA" checked="checked"> 
<input type="text" id="txt_a"> 
<input type="radio" id="txt_b-radio" value="valueB"> 
<input type="text" id="txt_b" disabled> 

默認#txt_b場將被禁用,當用戶點擊#txt_b,單選按鈕#txt_b將被啓用,#txt_a將被禁用。

條件進行驗證是:

#txt_a can contain only 12 digit number 
#txt_b can contain only 20 digit number 

一旦用戶在啓用字段中輸入值,然後以外的任何地方點擊驗證應該發生。如果用戶輸入的值無效,則應顯示#err_title錯誤消息。

假設用戶輸入#txt_a的值,然後單擊#txt_b-radio按鈕,則驗證應該不會發生,因爲用戶已切換輸入字段。在這種情況下,應禁用#txt_a並啓用txt_b。

我試圖用下面的代碼:

$('#txt_a').change(function() { 
    custNumber = $('#txt_a').val(); expression = /^[0-9]{12}$/; 
    if(custNumber === '') { 
     $("#err_title").css('display', 'none'); 
    } else if ((!custNumber.match(regexp))) { 
     $("#err_title").css('display', 'block'); 
    } else { 
     $("#err_title").css('display', 'none'); 
    } 
}); 
+1

對於最好的結果,你應該顯示你的努力(你的代碼),以及你的問題的細節。 –

+0

我嘗試過以下代碼: $('#txt_a')。change(function(){ \t custNumber = $('#txt_a')。VAL(); expression =/^ [0-9] {12} $ /; (custNumber ===''){(「#err_title」)。css('display','none'); ((!)編號(匹配)(正則表達式)){(「#err_title」)。css('display','block'); (「#err_title」).css('display','none');其他{ } else { $ } }); –

回答

1

$input1 = $('input[name="input1"]'); 
 
$input2 = $('input[name="input2"]'); 
 
$checkbox = $('input[name="checkbox"]'); 
 
    
 

 
$input1.on('change', function(e) { 
 
    var isValid = this.value.length >= 12; 
 
    
 
    this.classList.toggle('notValid', !isValid); 
 
}) 
 

 
$checkbox.on('change', function(e) { 
 
    $input2.prop('disabled', !this.checked); 
 
})
input.notValid { 
 
    border: 1px solid red; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<input type="text" name="input1" /> 
 
<input type="text" name="input2" disabled /> 
 
<input type="checkbox" name="checkbox" />

注: 在示例以上,我混合vanillia JS,用jQuery。我會建議避免它 - 我做到了這一點,以顯示你是多麼容易(並不總是......)它是沒有jQuery做這樣一個簡單的事情。 基本上,如果你想做這樣簡單的事情,我會建議放棄jQuery。

答:

您正在尋找jQuery的change事件。一旦輸入鬆散焦點,它就會觸發。

$(your_input).on('change', function(e) {...})

您可以驗證輸入長度一樣(內部監聽功能):

var isValid = this.value.length === 12

也是一樣有殘疾/啓用輸入。 你必須把事件偵聽器複選框

$(your_checkbox).on('change', function(e) {...})

然後,您可以獲取複選框的狀態:

var isChecked = this.checked

和禁用/啓用輸入

$(your_input).attr('disabled', !isChecked)

+0

我曾嘗試使用jQuery的更改功能,它工作正常,除了一個條件。假設我輸入input1的無效數字,然後立即單擊input2的複選框,更改函數將被調用,它會顯示錯誤消息。 但我對這個特定場景的要求是,當我在輸入1中輸入無效值後立即點擊input2時,應該禁用輸入字段1,並且應該啓用輸入字段2。 –

+0

我曾經聽過一些明智的話: 用戶界面就像一個笑話。如果你必須解釋它 - 這是不好的。 你必須解釋你想達到什麼,所以這個設計可能是不好的:P 我會推薦使用'input'而不是'change'事件 - 每當輸入字段內的文本改變時它會觸發。但我想你將不得不硬編碼你的邏輯。 – grzesiekgs