我想在textfield的值更改为3或9时调用函数。
不同的函数正在更改此文本字段的值,但是当字段的值更改为3或9时,我想调用另一个函数。
这是小提琴演示:http://jsfiddle.net/k3Q9k/20/
现在不应该从函数内部调用函数来改变字段的值。采取决策的功能应该是独立的。有点像这样:
JS:
$('.increment').click(function () {
var currentValue = $('#category').val();
var incrementedValue = parseInt(currentValue) + parseInt(1);
$('#category').val(incrementedValue);
// Check function should not be called from here
});
$('.decrement').click(function () {
var currentValue = $('#category').val();
var incrementedValue = parseInt(currentValue) - parseInt(1);
$('#category').val(incrementedValue);
// Check function should not be called from here
});
$('#category').change(function () {
// Check function should be called from here because this is an independent function
var currentValue = $('#category').val();
if (currentValue == 3 || currentValue == 9) {
alert("Got it");
}
});
HTML:
<input type="text" name="category" id="category" value="1" >
<a href="javascript:void(0);" class="increment" >Increment</a>
<a href="javascript:void(0);" class="decrement" >Decrement</a>
注意:我无法访问那些正在更改我的字段值的函数。所以我必须写一个盲目的代码,完全自己做决定
答案 0 :(得分:5)
您已将逻辑绑定到更改事件处理程序,但是当以编程方式更改输入字段的值时,不会触发更改事件。这就是问题所在。
一种可能的解决方案是在以编程方式更改值后手动触发更改事件,如下所示
$('#category').val(incrementedValue).change();
演示:Fiddle
答案 1 :(得分:0)
您还可以使用setInterval定期检查teh值。类似的东西:
<强> HTML:强>
<input type="text" name="category" id="category" value="1" >
<a href="javascript:void(0);" class="increment" >Increment</a>
<a href="javascript:void(0);" class="decrement" >Decrement</a>
<强>的jQuery / JavaScript的:强>
$('.increment').click(function (){
var currentValue = $('#category').val();
var incrementedValue = parseInt(currentValue)+parseInt(1);
$('#category').val(incrementedValue);
});
$('.decrement').click(function (){
var currentValue = $('#category').val();
var incrementedValue = parseInt(currentValue)-parseInt(1);
$('#category').val(incrementedValue);
});
var chk = setInterval(chkValue, 2000);
function chkValue() {
var currentValue = $('#category').val();
if(currentValue==4){
alert("Got it");
clearInterval(chk);
}
}
请注意,每隔2000毫秒(2秒)检查一次间隔。您也可以将其设置为更频繁的检查,例如。 500(半秒)。