1

我正在尝试将我的 js 代码重构为更加简洁,但遇到了这个错误。这是我的代码

function validate_field(e){
    console.log(typeof e);
    $(e).focusout(function(e){
        var price = $(e).val();
        var number = parseInt(price, 10);
        console.log(number)
        if (number < 0)
        {
            $(e).val(0);
        }
    })
}
$(function(){
    validate_field('#price');
})

根据堆栈跟踪错误在这里某处var price = $(e).val(); 我在这里缺少什么?

4

3 回答 3

5

尝试

   function validate_field(e){
        console.log(typeof e);
        $(e).focusout(function(ev){
-------------------------------^ here you are redeclaring the e previously passed as selector 
            var price = $(e).val();
            var number = parseInt(price, 10);
            console.log(number)
            if (number < 0)
            {
                $(e).val(0);
            }
        })
    }
    $(function(){
        validate_field('#price');
    })
于 2013-02-25T10:20:47.767 回答
4

您正在e用函数变量干扰参数e。它应该是 :

function validate_field(s) { // here also ? I have set "s" as parameter, you can set any word you like
    console.log(typeof s); // noticed the difference here?
    $(s).focusout(function(e) { // noticed the difference here?
        var price = $(this).val();
        var number = parseInt(price, 10);
        console.log(number)
        if (number < 0)
        {
            $(e).val(0);
        }
    });
}

您还可以像 @dakait 所做的那样更改您的事件参数以进行细微更改。

于 2013-02-25T10:20:22.847 回答
0

重新分配变量会导致问题。

function validate_field(field){ // both variable should not be same e & 'e' of inside function
    console.log(typeof e);
    $(field).focusout(function(e){
        var price = $(field).val();
        var number = parseInt(price, 10);
        console.log(number)
        if (number < 0)
        {
            $(field).val(0);
        }
    })
}
$(function(){
    validate_field('#price');
})

或者

可以直接使用下面的代码,而不用在脚本中调用其他函数

$(function(){
    $('#price').focusout(function(e){
            var price = $(this).val();
            var number = parseInt(price, 10);
            console.log(number)
            if (number < 0)
            {
                $(this).val(0);
            }
        })
});
于 2013-02-25T10:28:37.333 回答