我正在尝试使用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();
});
更新
除了我在这里分享的那个代码之外,我的代码还有其他错误。
感谢所有帮助过的人
答案 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 );
});
});