我在 jQuery 中有一个 "输入文本",我想知道是否有可能在发生 "onchange "之前获取该 "输入文本"("类型=数字 "和 "类型=文本")的值,并在发生 "onchange "之后获取同一输入文本的值。这是使用 jQuery 实现的。
我的尝试:
我尝试将值保存到变量中,然后在 onchange 中调用该值,但得到的是空白值。
最简单的方法是在元素获得焦点时使用 data()
保存原始值。下面是一个非常基本的示例:
JSFiddle:
$('input').on('focusin', function(){
console.log("Saving value " + $(this).val());
$(this).data('val', $(this).val());
});
$('input').on('change', function(){
var prev = $(this).data('val');
var current = $(this).val();
console.log("Prev value " + prev);
console.log("New value " + current);
});
注意:当可能有多个匹配元素时,使用委托事件处理程序通常更为高效。这样只需添加一个处理程序(开销更小、初始化更快),而且在事件发生时*的速度差异微乎其微。
下面是使用连接到 document
的委托事件的相同示例:
$(document).on('focusin', 'input', function(){
console.log("Saving value " + $(this).val());
$(this).data('val', $(this).val());
}).on('change','input', function(){
var prev = $(this).data('val');
var current = $(this).val();
console.log("Prev value " + prev);
console.log("New value " + current);
});
JsFiddle:
65/委托事件的工作原理是监听祖先元素(本例中为 "document ")上的事件("focusin"、"change "等),然后将 jQuery 过滤器("input")应用于气泡链中的元素,然后将函数应用于引起事件的匹配元素*。
注意:一般情况下,委托事件默认使用 document
而不是 body
。body "有一个与样式有关的错误,可能导致它无法获得冒泡鼠标事件。此外,document
总是存在的,因此您可以在DOM就绪处理程序*之外附加到它:)
我的解决方案在这里
function getVal() {
var $numInput = $('input');
var $inputArr = [];
for(let i=0; i < $numInput.length ; i++ )
$inputArr[$numInput[i].name] = $numInput[i].value;
return $inputArr;
}
var $inNum = getVal();
$('input').on('change', function() {
// inNum is last Val
$inNum = getVal();
// in here we update value of input
let $val = this.value;
});