$('#sum').keydown(function(){
updateResultPrice();
});
function updateResultPrice() {
ajax('/payment/summ', 'price='+$(this).val());
}
不工作!控制台日志打印: 未捕获的TypeError:无法读取未定义的属性'toLowerCase'
答案 0 :(得分:5)
您没有拨打.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
。
答案 1 :(得分:0)
我按原样测试了你的代码,并且实际上没有通过控制台获得“未捕获的TypeError:无法读取属性'toLowerCase'的未定义”错误。但是,我确实设法用ajax()
方法触发了错误。
您的代码无效的原因归结为$(this)
的事实等于window
,而不是#sum
元素。 six fingered man在他的回答中解释了这一点。
请尝试使用此代码。
// 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演示。