2011-05-24 127 views
3

为了尝试这个概念,我正在做一个非常简单的测试。如何使用jquery从动态生成的表单元素获取元素ID?

我从一开始就看到了一些带有文本输入的表单。 当我点击一个字段时,我想要捕捉它的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]部分也用于订购的形式字段元素通过体验分组,教育技能等...

哪能实现这一目标?

回答

5

一个简单的变化:

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

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

+0

如本文档中所述,live()不适用于某些事件。 改为“点击”而不是固定它。 (几乎相同的事件) 我选择这个答案作为解决方案,因为它在那里首先,我需要得到currentId供以后使用。 谢谢大家的帮助。你让我走上正轨。 – 2011-05-24 09:34:48

0

我相信你正在使用$("<someid>").focus(<function>),这个工程已经加载的文件,而不是在新标签中添加。

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

也看看jquery网站。他们用例子得到了很好的文档。对于现场检查了这一点http://api.jquery.com/live/

1

它可以是简单(无需获得ID,并通过它搜索):

$(document).ready(function() { 
    $('input').live('focus', function() { 
     $(this).val('blah'); 
    }); 
}); 
+0

>嗨,谢谢你的回答,但我只是尝试了下面的变体,但没有成功。 – 2011-05-24 07:20:10

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'); 
);