2

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

这是我的代码:

$.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">,然后在单击按钮后尝试从它们那里获取值再次,我将通过发送信息,$.post()但我无法从这些输入中获取值

编辑 2 这是处理程序的完整代码,希望它有所帮助,感谢所有贡献的人 $('.edit').on('click',function(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();
});

更新
除了我在这里共享的代码之外,我的代码中还有其他错误,这弄乱了功能。
感谢所有帮助过的人

4

1 回答 1

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()

或者

如果可编辑项实际上是文本字段本身,那么它们没有内部,您不能.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 );
    });     
});
于 2012-06-12T15:45:22.153 回答