Javascript 无法调用方法';toLowerCase';未定义的

Javascript 无法调用方法';toLowerCase';未定义的,javascript,jquery,Javascript,Jquery,我正试图重构我的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 <

我正试图重构我的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');
})
功能验证\u字段(e){
控制台日志(e型);
$(e).聚焦输出(函数(e){
var价格=$(e.val();
var编号=parseInt(价格,10);
控制台日志(编号)
如果(数字<0)
{
$(e).val(0);
}
})
}
$(函数(){
验证_字段(“#价格”);
})
根据stacktrace,错误在这里的某个地方
var price=$(e).val()

这里缺少什么?

您正在用函数的
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);
        }
    });
}
function validate_字段{//这里也是?我已经将“s”设置为参数,您可以设置任何您喜欢的单词
console.log(typeof s);//注意到这里的区别了吗?
$(s).focusout(函数(e){//注意到这里的区别了吗?
var price=$(this.val();
var编号=parseInt(价格,10);
控制台日志(编号)
如果(数字<0)
{
$(e).val(0);
}
});
}

您还可以像@dakait那样更改事件参数以进行微小更改。

您正在用函数的
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);
        }
    });
}
function validate_字段{//这里也是?我已经将“s”设置为参数,您可以设置任何您喜欢的单词
console.log(typeof s);//注意到这里的区别了吗?
$(s).focusout(函数(e){//注意到这里的区别了吗?
var price=$(this.val();
var编号=parseInt(价格,10);
控制台日志(编号)
如果(数字<0)
{
$(e).val(0);
}
});
}
您还可以像@dakait那样更改事件参数以进行微小更改。

试试看

   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');
    })
功能验证\u字段(e){
控制台日志(e型);
$(e).聚焦输出(功能(ev){
-------------------------------^在这里,您将重新声明以前作为选择器传递的e
var价格=$(e.val();
var编号=parseInt(价格,10);
控制台日志(编号)
如果(数字<0)
{
$(e).val(0);
}
})
}
$(函数(){
验证_字段(“#价格”);
})
试试看

功能验证\u字段(e){
控制台日志(e型);
$(e).聚焦输出(功能(ev){
-------------------------------^在这里,您将重新声明以前作为选择器传递的e
var价格=$(e.val();
var编号=parseInt(价格,10);
控制台日志(编号)
如果(数字<0)
{
$(e).val(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 validate_field(field){//两个变量不应与内部函数的e和“e”相同
控制台日志(e型);
$(字段).focusout(函数(e){
var price=$(字段).val();
var编号=parseInt(价格,10);
控制台日志(编号)
如果(数字<0)
{
$(字段).val(0);
}
})
}
$(函数(){
验证_字段(“#价格”);
})

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

$(function(){
    $('#price').focusout(function(e){
            var price = $(this).val();
            var number = parseInt(price, 10);
            console.log(number)
            if (number < 0)
            {
                $(this).val(0);
            }
        })
});
$(函数(){
$('#price').focusout(函数(e){
var price=$(this.val();
var编号=parseInt(价格,10);
控制台日志(编号)
如果(数字<0)
{
$(此).val(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 validate_field(field){//两个变量不应与内部函数的e和“e”相同
控制台日志(e型);
$(字段).focusout(函数(e){
var price=$(字段).val();
var编号=parseInt(价格,10);
控制台日志(编号)
如果(数字<0)
{
$(字段).val(0);
}
})
}
$(函数(){
验证_字段(“#价格”);
})

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

$(function(){
    $('#price').focusout(function(e){
            var price = $(this).val();
            var number = parseInt(price, 10);
            console.log(number)
            if (number < 0)
            {
                $(this).val(0);
            }
        })
});
$(函数(){
$('#price').focusout(函数(e){
var price=$(this.val();
var编号=parseInt(价格,10);
控制台日志(编号)
如果(数字<0)
{
$(此).val(0);
}
})
});

您希望e是什么类型的元素?它将始终是一个表单组件,如input/select?string,根据
console.log(类型e),它是字符串e-这是什么元素。。。。?您是否尝试过像$(this).val()…?这样使用jquery选择器的字符串?类似于
#someId
是的,没错。我将这个字符串作为参数传递,您希望e是什么类型的元素?它将始终是一个表单组件,如input/select?string,根据
console.log(类型e),它是字符串e-这是什么元素。。。。?您是否尝试过像$(this).val()…?这样使用jquery选择器的字符串?类似于
#someId是的,没错。我把这个字符串作为参数传递