2011-05-24 172 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'); 
);