Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用jQuery.val()时的javascript别名。为什么?_Javascript_Jquery_Aliasing - Fatal编程技术网

调用jQuery.val()时的javascript别名。为什么?

调用jQuery.val()时的javascript别名。为什么?,javascript,jquery,aliasing,Javascript,Jquery,Aliasing,我想备份一个文本框值以允许表筛选。当用户按backspace并将文本框留空时,我想输入我以前备份的值: vbackup存储初始文本框值,这是JSFIDLE中的“hello” $('#btn').click(function () { $('#mydiv').slideToggle('fast', function () { // I SAVE THE TEXTBOX VALUE SO THAT I CAN // GET IT BACK AFTERWARDS

我想备份一个文本框值以允许表筛选。当用户按backspace并将文本框留空时,我想输入我以前备份的值:

vbackup存储初始文本框值,这是JSFIDLE中的“hello”

$('#btn').click(function () {
    $('#mydiv').slideToggle('fast', function () {
        // I SAVE THE TEXTBOX VALUE SO THAT I CAN
        // GET IT BACK AFTERWARDS
        var vbackup = $('#txtbox').val();
        alert(vbackup);
        if ($(this).is(":visible")) {
            // NO MATTERS...
        }
        else {
            // IF TEXTBOX VALUE IS EMPTY I GET THE PREVIOUS
            // VALUE BACK
            if ($('#txtbox').val() == '') {
                // VBACKUP IS EMPTY !!
                alert(vbackup );
                $('#txtbox').val(vbackup );
            }
        }
    });

    return false;
});
我不明白为什么我的vbackup变量与textbox实际值匹配,因为我以前备份过

程序:

  • 按一下按钮
  • 清空文本框
  • 再按一下按钮。现在,应该将“hello”字从变量返回到文本框。此警报告知我的变量中的值已被重写
  • 见更新

    类似的东西(将值存储在html节点的属性中)也可以。另外,它不使用全局变量(yay)

    在此处签出演示:


    每次调用.slideToggle()都会覆盖vbackup(局部变量!!)。您应该将vbackup设置为全局,并且仅当textbox值不为空时才更新它。@devull69说:将您的“var vbackup”声明置于函数范围之外,不要在DOM notes上保存自定义变量。使用
    jQuery.fn.data
    代替或另一个模拟解决方案。@NULL简单问题:为什么?对于这样简单的任务,jQuery.data速度很慢,而且是一种过度使用。另外,它真正做的是将数据存储在DOM节点的属性中(稍微复杂一些,但仍然如此)。所以再次说明:为什么?@WTK这是一个较长的答案,您可以从这里开始阅读:@NULL我知道可能存在内存泄漏,但不久前我深入研究了这个问题,泄漏总是与在DOM节点中存储复杂对象有关。坚持使用字符串(在本例中)或布尔等简单数据类型是安全的。再次-检查jQuery源代码以进一步了解
    jQuery.data()
    的工作原理。
    $('#mydiv').hide();
    var vbackup = $('#txtbox').val();
    $('#btn').click(function () {
            $('#mydiv').slideToggle('fast', function () {
    
                alert(vbackup);
                if ($(this).is(":visible")) {
    
                }
                else {
                    if ($('#txtbox').val() == '') {
                        // In this alert vbackup
                        // is empty !!
                         $('#txtbox').val(vbackup );
    
                    }
                    else 
                        vbackup = $('#txtbox').val();
                }
            });
    
            return false;
        });
    
    // this is equal to #mydiv
    this.vbackup = $("#txtbox").val()
    
    $("#mydiv").hide();
    
    $('#btn').click(function () {
        $('#mydiv').slideToggle('fast', function () {
            var value = $('#txtbox').val() || $(this).data("value");
    
            if ( !$(this).is(":visible") && !$('#txtbox').val() ) {
                $('#txtbox').val( value );
            }
    
            $(this).data("value", value);
        });
    
        return false;
    });