为了尝试这个概念,我正在做一个非常简单的测试。
我从一开始就显示了一个带有一些文本输入的表单。 当我单击某个字段时,我想捕获其Id,并为输入文本添加一个值。
$(document).ready(function() {
$('input').focus(function() {
var currentId = $(this).attr('id');
$("#"+currentId).val('blah');
});
});
这适用于初始字段,但它停止使用使用ajax调用添加的字段。
诀窍是,用户可以点击任何字段,直到他们点击我才知道哪个字段。 我的Ids看起来像这样:
experience0-CompanyName //(original one)
experience[n]-CompanyName
([n]部分也用于对表格中的字段进行排序,因为元素按经验,教育技能等分组......
我怎样才能做到这一点?
答案 0 :(得分:5)
一个简单的改变:
$(document).ready(function() {
$('input').live("focus", function() {
var currentId = $(this).attr('id');
$("#"+currentId).val('blah');
});
});
.focus
仅绑定到被调用时存在的元素。 .live()
将函数绑定到所有现有元素的事件,以及稍后添加到DOM的任何元素。
答案 1 :(得分:2)
以前的答案不再合适。它们依赖于jQuery.live,现在已弃用。在jQuery 1.11中,对jQuery.live的调用会产生错误。目前首选的解决方案是使用jQuery.on。上面的jQuery.live代码的实现如下。第二个参数,当前设置为":input",可以由符合您需要的选择器替换。
$( "body" ).on('focus', ":input", function() {
var currentId = $(this).attr('id');
$("#"+currentId).val('blah');
});
答案 2 :(得分:1)
它可以更简单(无需获取id并通过它进行搜索):
$(document).ready(function() {
$('input').live('focus', function() {
$(this).val('blah');
});
});
答案 3 :(得分:0)
我相信你正在使用$("<someid>").focus(<function>)
。这适用于已加载的文档,而不适用于添加的新标记。
Try using $("<someid>").live("focus", <function>);
另外看看jquery网站。他们用例子得到了很好的文档。如需实时查看http://api.jquery.com/live/