4

为了尝试这个概念,我正在做一个非常简单的测试。

我得到了一个表格,从一开始就显示了一些文本输入。当我单击一个字段时,我想捕获它的 Id,并向输入文本添加一个值。

$(document).ready(function() {
    $('input').focus(function() {
        var currentId = $(this).attr('id');
       $("#"+currentId).val('blah');
    });
});

这适用于初始字段,但它停止使用使用 ajax 调用添加的字段。

诀窍是,用户可以点击任何字段,而我不知道在他们点击之前是哪个字段。我的 ID 如下所示:

experience0-CompanyName //(original one)
experience[n]-CompanyName

([n] 部分也用于对表单中的字段进行排序,因为元素按经验、教育技能等进行分组......

我怎样才能做到这一点?

4

4 回答 4

5

一个简单的改变:

$(document).ready(function() {
    $('input').live("focus", function() {
        var currentId = $(this).attr('id');
       $("#"+currentId).val('blah');
    });
});

.focus只绑定到它被调用时存在的元素。.live()将函数绑定到所有现有元素的事件,以及以后添加到 DOM 的任何元素。

于 2011-05-24T06:20:58.593 回答
3

以前的答案不再合适。他们依赖 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');
});
于 2014-06-09T15:36:11.010 回答
1

它可以更简单(无需获取 id 并通过它进行搜索):

$(document).ready(function() {
    $('input').live('focus', function() {
        $(this).val('blah');
    });
});
于 2011-05-24T06:22:04.337 回答
0

我相信你正在使用$("<someid>").focus(<function>). 这适用于已加载的文档,而不适用于添加的新标签。

Try using $("<someid>").live("focus", <function>);

也看看jquery网站。他们得到了非常好的带有示例的文档。对于现场检查这个http://api.jquery.com/live/

于 2011-05-24T06:20:48.500 回答