jQuery:变量 ID 未更新
jQuery: Variable ID not updating
我想要一个按键功能来改变光标在输入字段中的位置。当jQuery id只是"body"时,它就可以工作,但随后键控在任何地方都有效。相反,我希望键控仅在最近生成的输入字段中起作用。请参阅下面的代码。
var ui_pc = 3001;
$(document).ready(function () {
$("#"+ui_pc+"input").keydown(function(e){
var press = e.which;
press = press.toString();
if(e.which=="13") {
ui_pc++;
$("#main").append("<div id='"" + ui_pc + "'"><input id='""+ ui_pc+ "input'"></input></div>");
document.getElementById(ui_pc+"input").focus();
}
});
});
由于光标从第 3001 行开始,因此当您将光标放在那里时,它可以正常工作。但是,该函数不会更新,即该函数仅适用于div"#3001input",并且不会使用名为 pc_ui 的变量进行更新。
为什么会这样呢?我认为这与JS中的闭包有关?
必须更改为委派事件方法:
$(document).on('keydown', '[id$="input"]', function(e){
//your stuff
});
为什么会这样?
这是因为您在 DOM 准备就绪时将事件附加到现有元素,而不是用于创建的新元素。若要避免这种情况,请使用此委派方法,它可以工作。
查看更多:
https://learn.jquery.com/events/event-delegation/
您可以取消绑定以前的输入并绑定到最新输入,因为您希望它适用于最近生成的输入字段。
var ui_pc = 3001;
$(document).ready(function(){
bindToNewInput();
});
function appendNewInput(e)
{
var press = e.which;
press = press.toString();
if(e.which=="13") {
ui_pc++;
$("#main").append("<div id='"" + ui_pc + "'"><input id='""+ ui_pc+ "input'"></input></div>");
document.getElementById(ui_pc+"input").focus();
bindToNewInput();
}
}
function bindToNewInput()
{
$("#"+(ui_pc-1)+"input").off('keydown');
$("#"+ui_pc+"input").keydown(function(e){
appendNewInput(e);
});
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="main">
<input id="3001input" type="text"/>
</div>
相关文章:
- 向更新mysql查询传递一个id
- 获取 HTML 5 音频控制文件位置并在不使用 id 选择器的情况下更新 src
- 在不重构Mongo数据库的情况下,更新嵌入数组中的具有给定ID的对象
- 更新脚本以针对具有递增 ID 的新创建的表行运行
- 如何在jQuery的.on()方法中动态更新按钮的ID选择器
- 如何使用相同的id但不同的内容进行更新
- 通过Couchdb中的更新处理程序添加id和author字段
- 使用特定 ID 更新文本框
- 从自定义用户控件更新contenttemplate下页面中控件的id
- X-editable:如何获取每行的id,以便更新单个成员
- Meteor Update集合-未捕获错误:不允许.不受信任的代码只能通过ID更新文档.[403]
- Ember更新id在服务器上持久化后
- Grails richui自动完成将对象传递给函数或更新对象ID
- 使用 Ajax 更新 href ID
- MySQL 按行[id]使用新信息更新“n”行数
- 使用 ID 更新文本区域值,而不是在 AngularJs 中使用 ng-model
- 交换 HTML 表行时更新行 ID
- 无法更改动态更新的数据 ID
- 将(ID)参数从aspx页面传递到javascript函数,该函数在页面的其他地方更新ID
- 收集后更新id.在Backbone.js中创建