我正试图重构我的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();
我在这里错过了什么?
尝试
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');
})
您正在用函数的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那样更改事件参数以进行细微更改。
重新分配变量会导致问题。
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);
}
})
});