开发者问题收集

未捕获的类型错误:无法读取未定义的属性“toLowerCase”

2014-11-28
23744
$('#sum').keydown(function(){
           updateResultPrice(); 
        });

        function updateResultPrice() {
            ajax('/payment/summ', 'price='+$(this).val());
        }

无法正常工作!控制台日志打印: 未捕获的 TypeError:无法读取未定义的属性“toLowerCase”

2个回答

您没有调用 .toLowerCase() ,但我猜您将它链接到 .val() 的末尾。

问题在于您的 this 值是 window ,而不是 #sum 元素。

将您的处理程序更改为:

$('#sum').keydown(updateResultPrice); // <-- pass the function directly

function updateResultPrice() {
    ajax('/payment/summ', 'price='+$(this).val().toLowerCase());
}

现在,当调用处理程序时, this 将引用 #sum 变量,并且 .val() 将不会返回 undefined

six fingered man
2014-11-28

我按原样测试了您的代码,控制台中并没有出现“未捕获 TypeError:无法读取未定义的属性‘toLowerCase’”错误。但是,我设法使用 ajax() 方法触发了错误。

您的代码无法正常工作的原因是 $(this) 等于 window ,而不是 #sum 元素。 六指人 在他的回答中确实解释了这一点。

请尝试使用此代码。

// Switch 'keydown' to 'on' and include 'keyup' event to get the actual data;
// The 'on' method allows you to "string" events together. 'keyup keydown click focus...' etc.
$('#sum').on('keyup', function(){
    // Define a variable to make calling 'this' easier to write;
    var me = $(this);
    // Get the value of "me";
    var val = me.val();

    // Relay the value to the function;
    updateResultPrice( val );
});

// The function, updateResultPrice, accepts an argument of "value";
function updateResultPrice( value ) {
    // Your prior code used $(this).val() within the function;
    // The function doesn't have a $(this) to retreive the value from it,
    // So, use the "value" argument;
    $.ajax('/payment/summ', 'price=' + value); // Call "$.ajax", not "ajax";
    // The above snippet will trigger a 404, should the file not exist.

    // Just to test that it works, log it to the console;
    console.log( 'the price is: '+value );
}

为了您的测试乐趣,这里有一个 JSFiddle 上述代码的演示。

LeoV117
2014-11-28