无法通过jquery从keyup上的输入文本中获取值

时间:2012-06-12 15:39:20

标签: javascript jquery forms keyup

我正在尝试使用jQuery中的方法keyup获取<input type=text>的值,但每当我记录它时,它都会记录未定义。

这是我的代码:

$.each(editables,function(i){
    current  = $(editables[i]);
    var value;              
    current.on('keyup', function(){
        value = $(this).val();
        console.log( value );
    });
    current.html( value );
});

提前致谢

修改

我有一个表格显示数据库的所有信息,我有一个编辑信息的按钮,我所做的是将所有<td class="editable">转换为<input type="text">和i'我再次点击按钮后尝试从中获取值,我将通过$.post()发送信息,但我无法从这些输入中获取值

编辑2 这是处理程序的完整代码,希望它有所帮助,感谢所有贡献的人 $( '编辑 ')。在(' 点击',函数(E){

    $this = $(this);
    editables = $this.parents('tr').find('td.editable');

    if($this.text() == "Save"){
        row  = $this.parents('tr');
        table = row.data('table');
        id = row.data('id');
        field = row.data('field');
        /*
        $.each(editables,function(i){
            current  = $(editables[i]);
            var value;              
            current.on('keyup', function(){
                value = $(this).val();
                console.log( value );
            });
            console.log( current );
            current.html( value );
        });
        */
        editables.each(function(i){
            var current = $(this);
                value;
            current.on('keyup',function(){
                value = $(this).val();
                console.log(value);
            })
        });

        $this.val('Edit');  

    } else {            

        $.each(editables,function(i){
            current  = $(editables[i]);
            currentValue = current.text();

            current.html("<input type='text' value='"+currentValue+"'></input>");
        });     

        $this.val('Save');
    }

    e.preventDefault();
});

更新
除了我在这里分享的那个代码之外,我的代码还有其他错误。
感谢所有帮助过的人

1 个答案:

答案 0 :(得分:3)

editables仍然是基于您更新的代码的<td>标记,而不是现在内部的输入。请改用.find来定位新的输入标记。

   editables.find('input').each(function(i){
        var current = $(this);
            value;
        current.on('keyup',function(){
            value = $(this).val();
            console.log(value);
        })
    });

(回答上面更新的问题)


(回答下面的原始问题)

首先,您需要在.html()内移动.on('keyup'语句。否则它将仅在keyup发生之前运行一次。基本上你在做的是: 1.初始化value。 2.将current.html设置为初始化变量,没有值(undefined)。 3.听取keyup。 4.在keyup更改变量值并且不执行任何操作。

.html()位于.on内时,它将仅在keyup之后和每个keyup上运行。哪些保证value将在使用之前进行初始化。

$.each(editables,function(i){
    current  = $(editables[i]);
    var value; 
    var currentTextField = $('#theInput'); //should be relational to the editable, not a straight selection query as shown here             
    currentTextField.on('keyup', function(){
        value = currentTextField.val();
        console.log( value );
        current.html( value );
    });

});

假设可编辑区域是您希望显示文本字段结果的区域。 current可编辑不是文本字段本身,不会回复keyup.val()

如果editables实际上是文本字段本身,那么它们没有内部,您不能对它们使用.html()。你也不应该这样做。所以假设你决定在某个地方输出结果。

$.each(editables,function(i){
    current  = $(editables[i]);
    var value; 
    var currentTextField = $('#outPutLocation'); //should be relational to the editable, not a straight selection query as shown here             
    current.on('keyup', function(){
        value = current.val();
        console.log( value );
        currentTextField.html( value );
    });     
});