我只想用这个函数模拟实时输入:
$('#expenseAccordion').on('keypress', '.netAmount input', function() {
setTimeout(function() {
$(this).closest('.accordion-group').find('.amount input').val($(this).val());
}, 0);
});
Run Code Online (Sandbox Code Playgroud)
这不起作用,并产生这个奇怪的错误:
未捕获的TypeError:无法调用未定义的方法'toLowerCase'
存在问题的jQuery行(l 4245):
hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ];
Run Code Online (Sandbox Code Playgroud)
如果我从函数中删除所有$(this)并尝试这样的事情:
$('#expenseAccordion').on('keypress', '.netAmount input', function() {
setTimeout(function() {
$('.amount input').val(4);
}, 0);
Run Code Online (Sandbox Code Playgroud)
});
它可以工作,但我真的需要获取事件发生的当前元素,因为我有多个输入.
Aru*_*hny 10
this在settimeout内部没有指向该expenseAccordion元素,您可以使用$.proxy()将自定义执行上下文传递给回调函数
setTimeout($.proxy(function() {
$(this).closest('.accordion-group').find('.amount input').val($(this).val());
}, this), 0);
Run Code Online (Sandbox Code Playgroud)