我一直在寻找解决这个早上,我没有找到任何简单的解决方案...基本上,我想捕捉输入要素的变化,但也知道以前的值。
这里有一个变化事件,并在其最简单的形式输入的元素。 很显然,我可以得到$(ELEM).VAL()的新的价值,但有一个偷偷摸摸的方法我错过了获得前值? 我没有看到jQuery的API在什么做到这一点,但也许其他人已经做到了这一点,并有一些提示吗?
<script>
$(document).ready(function(){
$('#myInputElement').bind('change', function(){
//var oldvalue = ???
var newvalue = $(this).val();
});
});
</script>
<input id="myInputElement" type="text">
我不反对写我自己的解决方案,我只是想确保我不是在这里重现轮。
更好的办法是使用存储。数据旧值。 这免去一个全局变量,你应该远离,并保持元素中封装的信息的创建。 一个真实的例子,为什么全局变量是不好的记录在这里
如
<script>
//look no global needed:)
$(document).ready(function(){
// Get the initial value
var $el = $('#myInputElement');
$el.data('oldVal', $el.val() );
$el.change(function(){
//store new value
var $this = $(this);
var newValue = $this.data('newVal', $this.val());
})
.focus(function(){
// Get the value when input gains focus
var oldValue = $(this).data('oldVal');
});
});
</script>
<input id="myInputElement" type="text">
这可能做的伎俩:
$(document).ready(function() {
$("input[type=text]").change(function() {
$(this).data("old", $(this).data("new") || "");
$(this).data("new", $(this).val());
console.log($(this).data("old"));
console.log($(this).data("new"));
});
});
这里演示
$('#element').on('change', function() {
$(this).val($(this).prop("defaultValue"));
});
你可以有复制到只要焦点离开输入字段(应该做你想要什么)的隐藏字段输入字段的值。 请参见下面的代码:
<script>
$(document).ready(function(){
$('#myInputElement').bind('change', function(){
var newvalue = $(this).val();
});
$('#myInputElement').blur(function(){
$('#myHiddenInput').val($(this).val());
});
});
</script>
<input id="myInputElement" type="text">
(未经测试,但它应该工作)。
每个DOM元素有一个名为默认值的属性。 你可以用它来获取默认值,如果你只是想比较数据的第一个变化。
在拉斯的答案,他结合了焦点事件。 我不认为这是必要的。
你可以存储在更改事件的旧值。
<script>
$(document).ready(function(){
var newValue = $('#myInputElement').val();
var oldValue;
$('#myInputElement').change(function(){
oldValue = newValue;
newValue = $(this).val();
});
});
</script>
<input id="myInputElement" type="text">
几点。
使用$。数据而不是$ .fn.data
// regular
$(elem).data(key,value);
// 10x faster
$.data(elem,key,value);
然后,你可以通过事件对象的前值,没有你的人生复杂化:
$('#myInputElement').change(function(event){
var defaultValue = event.target.defaultValue;
var newValue = event.target.value;
});
被警告,默认值是不是最后的设定值。 这是场初始化所用的值。 但是你可以用$。数据保持“属性oldValue”的轨迹
我建议你总是申报“事件”对象在事件处理函数,并与萤火虫(执行console.log(事件))或东西对其进行检查。 你会发现很多有用的东西存在,将节省您创建/访问jQuery的对象(这是伟大的,但如果你可以更快...)
我创建了一个基于乔伊·格拉的建议这些功能,向你表示感谢。 我阐述了一点点,也许有人可以使用它。 第一个函数checkDefaults()当输入改变时,当表单使用jQuery.post提交的第二被称为被调用。 div.updatesubmit是我的提交按钮,和阶级“needsupdate”是一个指标,更新制作,但尚未提交。
function checkDefaults() {
var changed = false;
jQuery('input').each(function(){
if(this.defaultValue != this.value) {
changed = true;
}
});
if(changed === true) {
jQuery('div.updatesubmit').addClass("needsupdate");
} else {
jQuery('div.updatesubmit').removeClass("needsupdate");
}
}
function renewDefaults() {
jQuery('input').each(function(){
this.defaultValue = this.value;
});
jQuery('div.updatesubmit').removeClass("needsupdate");
}
我发现了一个卑鄙的手段,但它的工作原理,你可以使用悬停功能改变之前获得的价值!