我试图保持输入禁用,直到2个输入至少有4个字符。我能在SO上找到的最接近的用户总共可以找到8个字符,但这样就可以让其中一个输入为空白,而另一个输入则超过8.这是我尝试过的:
没有on()
$('#ancestor input').keyup(function(){
var foo = $('input[name=foo]').val();
var bar = $('input[name=bar]').val();
if(foo.length > 4 && bar.length > 4){
$('#some-button').prop('disabled', false);
}else{
$('#some-button').prop('disabled', true);
}
});
使用on()
$('#ancestor input').on('keyup',function(){
var foo = $('input[name=foo]').val();
var bar = $('input[name=bar]').val();
if(foo.length > 4 && bar.length > 4){
$('#some-button').prop('disabled', false);
}else{
$('#some-button').prop('disabled', true);
}
});
有趣的是,我可以console.log(foo.length)
和console.log(bar.length)
看到每个keyup
的两个长度都很好。
答案 0 :(得分:5)
正如years
所述,您的情况是使用$builder->add('date', 'date', array(
'label' => 'Date',
'format' => 'dd MM yyyy',
'years' => range(date('Y'), date('Y') + 5),
'required' => true
));
代替A. Wolff
。
>
如果您有2个输入元素,您也可以反转条件:
>=
从概念上讲,这意味着如果任何输入不是4个字符,则禁用""而不是"如果两个输入的长度都超过4个字符,则不要禁用#34;。
答案 1 :(得分:2)
就我所见,您的代码可以正常工作。唯一的问题是,由于您选择使用的运营商,您的条件会检查至少5个字符,而不是4个字符。
使用>=
代替,因为这会声明"等于或大于"
$('#ancestor input').on('keyup',function(){
var foo = $('input[name=foo]').val();
var bar = $('input[name=bar]').val();
$('#some-button').prop('disabled', !(foo.length >= 4 && bar.length >= 4));
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<form id="ancestor">
<input name="foo">
<input name="bar">
<input id="some-button" type="submit" disabled>
</form>
&#13;
答案 2 :(得分:0)
您可以尝试将jquery对象长度与已过滤的jquery对象进行匹配,以查看它们是否不同。
$('#ancestor input').on('input keyup change paste', function () {
var els = $('input[name=foo],input[name=bar]');
var filtered = els.filter(function(){
return (this.value.length >= 4);
});
$('#some-button').prop('disabled', (els.length != filtered.length));
});
答案 3 :(得分:0)
事实是,我已经盯着它看了3个小时而且这只是一个错字(错误的长度作为其中一个变量的 lengh ) 。显然需要更多的咖啡才能看到它。感谢大家的帮助。