在一个jQuery的更改事件 元素 - 任何方式保留以前的值?(jQuery Change e

2019-06-17 12:47发布

我一直在寻找解决这个早上,我没有找到任何简单的解决方案...基本上,我想捕捉输入要素的变化,但也知道以前的值。

这里有一个变化事件,并在其最简单的形式输入的元素。 很显然,我可以得到$(ELEM).VAL()的新的价值,但有一个偷偷摸摸的方法我错过了获得前值? 我没有看到jQuery的API在什么做到这一点,但也许其他人已经做到了这一点,并有一些提示吗?

<script>
    $(document).ready(function(){
        $('#myInputElement').bind('change', function(){
            //var oldvalue = ???
            var newvalue = $(this).val();
        });
    });
</script>
<input id="myInputElement" type="text">

我不反对写我自己的解决方案,我只是想确保我不是在这里重现轮。

Answer 1:

更好的办法是使用存储。数据旧值。 这免去一个全局变量,你应该远离,并保持元素中封装的信息的创建。 一个真实的例子,为什么全局变量是不好的记录在这里

<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">


Answer 2:

这可能做的伎俩:

$(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"));
    });
});

这里演示



Answer 3:

$('#element').on('change', function() {
    $(this).val($(this).prop("defaultValue"));
});


Answer 4:

你可以有复制到只要焦点离开输入字段(应该做你想要什么)的隐藏字段输入字段的值。 请参见下面的代码:

<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">

(未经测试,但它应该工作)。



Answer 5:

每个DOM元素有一个名为默认值的属性。 你可以用它来获取默认值,如果你只是想比较数据的第一个变化。



Answer 6:

在拉斯的答案,他结合了焦点事件。 我不认为这是必要的。

你可以存储在更改事件的旧值。

<script>
    $(document).ready(function(){

        var newValue = $('#myInputElement').val();
        var oldValue;

        $('#myInputElement').change(function(){
            oldValue = newValue;
            newValue = $(this).val();
        });
    });
</script>
<input id="myInputElement" type="text">


Answer 7:

几点。

使用$。数据而不是$ .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的对象(这是伟大的,但如果你可以更快...)



Answer 8:

我创建了一个基于乔伊·格拉的建议这些功能,向你表示感谢。 我阐述了一点点,也许有人可以使用它。 第一个函数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");
}


Answer 9:

我发现了一个卑鄙的手段,但它的工作原理,你可以使用悬停功能改变之前获得的价值!



文章来源: jQuery Change event on an element - any way to retain previous value?