如何使用jquery从动态生成的表单元素中获取元素Id?

时间:2011-05-24 06:17:42

标签: jquery dynamic-forms

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

我从一开始就显示了一个带有一些文本输入的表单。 当我单击某个字段时,我想捕获其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]部分也用于对表格中的字段进行排序,因为元素按经验,教育技能等分组......

我怎样才能做到这一点?

4 个答案:

答案 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/

相关问题