2016-11-30 64 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