嘿,這是我第一次真正寫完一個問題而沒有在這個過程中給我答案。 :)Prototype動態添加的HTML中的Ajax.Autocompleter不起作用
我有一個嵌套的形式(沿着賴安貝茨Railscast教程主題),它允許用戶動態添加額外的領域,添加/刪除嵌套模型使用基於原型的JavaScript。額外的字段可以添加和刪除,並可以很好地創建新的模型。
問題是,其中一個字段使用Ajax.Autocompleter;在當部分被呈現在頁面的代碼如下所示:
<script type="text/javascript">
//<![CDATA[
new Ajax.Autocompleter(...various args...);
//]]>
</script>
如果部分渲染到開始(該autocompleter工作正常例如,如果表單的開始是部分的一個實例,或當編輯現有的嵌套模型)。但是,它在動態添加的表單字段中不起作用。
我已經嘗試使用插入()和只是設置一個空的div的innerHTML插入HTML部分。使用insert(),Autocompleter代碼將被評估,<script>
標記中的所有內容都會消失(正如我所理解的那樣),但自動完成功能無效。通過設置innerHTML,腳本看起來與預渲染的部分完全一樣,但自動完成器仍然不會被調用。
我懷疑這與evalScripts的工作方式有關,我發現some documentation on the subject,但我很難找出如何將它應用到Autocompleter聲明。
任何意見非常感謝!
ETA:將用於在新的部分添加的javascript:
function add_section(link, nested_model_name, content) {
// get the right new_id which should be in a div with class "last_id" at the bottom of
// the nearest section
var last_id = parseInt($(link).up().previous('.last_id').innerHTML);
var new_id = last_id + 1;
var regexp = new RegExp("new_" + nested_model_name, "g");
content = content.replace(regexp, new_id)
// this is the line that actually inserts the content into the page
$(link).up().insert({before: content});
}
調試與螢火示出內容是正確的(即,具有在它的正常工作的自動完成代碼)之前,它是插入。
感謝您的嘗試,但不幸的是沒有 - 我已經添加了JavaScript功能,將新的部分添加到我原來的問題,以獲得更清晰。我的意思是用'insert()'Prototype嘗試評估腳本,可能與使用Ajax.Updater和evalScripts設置爲true的方式相同。 – shalott 2010-10-26 14:18:13