当textfield = 3或9的值时调用函数

时间:2014-01-17 05:30:35

标签: javascript jquery

我想在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>

注意:我无法访问那些正在更改我的字段值的函数。所以我必须写一个盲目的代码,完全自己做决定

2 个答案:

答案 0 :(得分:5)

您已将逻辑绑定到更改事件处理程序,但是当以编程方式更改输入字段的值时,不会触发更改事件。这就是问题所在。

一种可能的解决方案是在以编程方式更改值后手动触发更改事件,如下所示

$('#category').val(incrementedValue).change();

演示:Fiddle

答案 1 :(得分:0)

您还可以使用setInterval定期检查teh值。类似的东西:

jsFiddle Demo

<强> 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(半秒)。