调用jQuery.val()时的javascript别名。为什么?
我想备份一个文本框值以允许表筛选。当用户按backspace并将文本框留空时,我想输入我以前备份的值: vbackup存储初始文本框值,这是JSFIDLE中的“hello”调用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
$('#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实际值匹配,因为我以前备份过
程序:
每次调用.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;
});