2011-08-18 67 views
0

如何編寫腳本來更改輸入字段的文本值,但該字段尚未創建?jQuery - 在創建輸入字段後更改文本

該腳本在輸入字段創建之前加載。它需要知道,當任何一個類的輸入被創建時,它會有一些文本放入其值。這可以通過live()完成嗎?

爲了澄清,事件的順序是:

- 爲網頁應用程序範圍內JavaScript加載。這包含沿線的腳本的東西:

$('.myDiv input').each(function() { 
    $(this).val('some text'); 
}); 

- 第二特定頁面的腳本現在被裝載,動態地在頁面上創建一個輸入,沒有任何價值。 我不能修改這個腳本。這很重要,我需要一個不會修改此腳本的解決方案(否則我不會在此發佈)。

$('.myDiv').html('<input type="text" />'); 
+0

查看文檔http://api.jquery.com/ready/ – akrisanov

+0

你是如何創建輸入字段的? –

回答

1

是的,live()會做你想做的。只要您使用jQuery動態添加元素,它就會工作。

The jQuery.live() api is clear on this

使用live()根據需要隨時改變輸入字段的值上focusblurkeyup綁定。

$('.clickme').live('click', function() { 
    // Live handler called. 
}); 

UPDATE:假設你不能改變輸入元素以任何方式加入之前。

$('#container').bind("DOMSubtreeModified",function() { 
    $('input.myClass:not(.alreadyChanged)').val("whatever you want to change it to"); 
    $('input.myClass:not(.alreadyChanged)').addClass('.alreadyChanged'); 
} 

這種方式使用live()當一個新的元素添加到DOM,該功能會自動觸發你不需要。

+0

加載後創建我澄清了我的原始帖子。創建時如何使用live來改變字段的文本?焦點,模糊等很簡單,但我不確定使用什麼事件來更改文本。 – BadHorsie

+0

如果您使用jQuery創建輸入,爲什麼不在創建時更改它?如果這不是一個選項,您可以手動調用元素上的click()或focus()事件嗎?你也可以在容器div或者body上放置一個'change()'事件。所以當div或body改變時,它會遍歷所有給定的輸入字段並更改它們的文本。 如果你不想每次遍歷所有的字段,你可以添加一個額外的類到每個你已經改變了值的輸入字段,並使用jquery選擇器來消除它們$(「input.myClass:not (.alreadyChanged)「)'。 – Ali

+0

我在創建它時無法更改它,因爲插件腳本正在創建它,因此我需要避免僅爲此進行修改。所以,如果你牢記這一點,這意味着我不能添加一個類到輸入中,我不能改變它的值等。我必須等待它被創建,並且有一個腳本來監聽它何時得到創建並更改其文本(如果可能的話)。 – BadHorsie

0

由於腳本已經加載。

我認爲myClass的財產應與

<input style="myClass Styles Here">TEXT is Here</input> 

創建時。

+0

輸入尚未加載。 – BadHorsie

+0

我知道,但它會通過innerHTML或jQuery .html() – InspiredJW

0

不幸的是live()不支持加載事件。你能把它放在準備好的事件中嗎?

$().ready(function(){ $('.myClass').val('my text');}); 

你也可以考慮包裝jQuery插件並在應用插件後立即更改文本。閱讀更多關於如何在這裏擴展jQuery插件:Best Way to Extend a jQuery Plugin

+0

嗯,是啊'生活('負載',功能(){...'真的很理想,這基本上就是我想要做的。 – BadHorsie

相關問題