如何恢复文本框数据

How to restore Textbox Data

本文关键字:文本 数据 恢复 何恢复      更新时间:2023-09-26

我有一个小要求,

我们已经恢复了之前清除的文本框数据。
下面是我的HTMl代码

<table>
   <tr><td><input type="textbox"></td></tr>
   <tr><td><input type="checkbox"></td></tr>
</table>
这是我的JQuery代码
       $('TABLE TR TD').find(':checkbox').change(function()
        {
            if($(this).prop('checked'))
            {
               $(this).parents('TR').siblings('TR').find('input').val("")
            }
            if(!$(this).prop('checked'))
            {
               $(this).parents('TR').siblings('TR').find('input').val(?)
            }
        });

我的要求是清除文本框的内容,如果checkbox被选中。如果我取消选择它,文本框应该恢复与以前的数据。

使用全局变量存储之前的数据-

var prevData;

然后这样修改你的代码-

$('TABLE TR TD').find(':checkbox').change(function()
{
    if($(this).prop('checked'))
    {
        var $element = $(this).parents('TR').siblings('TR').find('input')
        prevData = $element.val();
        $element.val("");
    }
    else
    {
        $(this).parents('TR').siblings('TR').find('input').val(prevData);
    }
});

当复选框被选中时,在清除该值之前,使用jQuery .data() API存储它。

<table>
   <tr><td><input type="text"></td></tr>
   <tr><td><input type="checkbox"></td></tr>
</table>
$('input:checkbox').change(function() {
    var input = $(this).closest('table').find('input[type="text"]');
    if ($(this).prop('checked')) {
        input.data('text', input.val());
        input.val('');
    } else {
        input.val(input.data('text'));
    }
});

一个演示,如果有多个对,只要它们存在于单独的<table>父节点中,它就可以工作。如果不是这种情况,你可以改变查找器来获取前一个兄弟。不使用全局变量,这不是真正的最佳实践-如何避免在JavaScript中使用全局变量?

编辑:更新的演示基于您的其他问题Keydown事件不能正常工作,但这只适用于关键事件,而不是如果有人将文本粘贴到<input>

我建议一些不太依赖于标记保持不变的东西(尽管确实要求复选框跟随文本输入):

var prevData, textInputIndex;
$('input:checkbox').change(
    function(){
        thisIndex = ($(this).index('table input') - 1);
        textInput = $('table input').eq(thisIndex);
        if ($(this).is(':checked')) {
            prevData = $(textInput).eq(thisIndex).val();
            $(textInput).eq(thisIndex).val('');
        }
        else {
            $(textInput).eq(thisIndex).val(prevData);
        }
    });

JS Fiddle demo.


编辑以消除只有一个变量来存储文本输入值的问题:

var $textInputs = $('table input:text');
var prevData, textInputIndex, affectedTextInputIndex, textInputValues = [];
$('input:checkbox').change(
    function(){
        affectedTextInputIndex = $(this).index('table input') - 1;
        textInputIndex = $('table input').eq(affectedTextInputIndex).index('table input:text');
        if ($(this).is(':checked')) {
            textInputValues[textInputIndex] = $textInputs.eq(textInputIndex).val();
            $textInputs.eq(textInputIndex).val('');
        }
        else {
            $textInputs.eq(textInputIndex).val(textInputValues[textInputIndex]);
        }
    });

JS Fiddle demo.


编辑以删除table中包含input元素的明确要求:

var $textInputs = $('input:text');
var prevData, textInputIndex, affectedTextInputIndex, textInputValues = [];
$('input:checkbox').change(
    function(){
        affectedTextInputIndex = $(this).index('input') - 1;
        textInputIndex = $('ul input').eq(affectedTextInputIndex).index('input:text');
        if ($(this).is(':checked')) {
            textInputValues[textInputIndex] = $textInputs.eq(textInputIndex).val();
            $textInputs.eq(textInputIndex).val('');
        }
        else {
            $textInputs.eq(textInputIndex).val(textInputValues[textInputIndex]);
        }
    });

JS Fiddle demo.


引用:

  • :checkbox选择器
  • change() .
  • is() .
  • :checked选择器。
  • index() .
  • val() .