Javascript 动态添加的HTML中的原型Ajax.Autocompleter不起作用

Javascript 动态添加的HTML中的原型Ajax.Autocompleter不起作用,javascript,ruby-on-rails,prototype,autocomplete,nested-forms,Javascript,Ruby On Rails,Prototype,Autocomplete,Nested Forms,嘿,这是我第一次在没有给出答案的情况下写完一个问题。:) 我有一个嵌套表单(与Ryan Bates关于该主题的Railscast教程类似),它允许用户使用基于原型的javascript动态添加其他字段以添加/删除嵌套模型。额外的字段可以添加和删除,并且可以很好地创建新模型 问题是,其中一个字段使用Ajax.Autocompleter;呈现分部时页面中的代码如下所示: <script type="text/javascript"> //<![CDATA[ new Ajax.Aut

嘿,这是我第一次在没有给出答案的情况下写完一个问题。:)

我有一个嵌套表单(与Ryan Bates关于该主题的Railscast教程类似),它允许用户使用基于原型的javascript动态添加其他字段以添加/删除嵌套模型。额外的字段可以添加和删除,并且可以很好地创建新模型

问题是,其中一个字段使用Ajax.Autocompleter;呈现分部时页面中的代码如下所示:

<script type="text/javascript">
//<![CDATA[
new Ajax.Autocompleter(...various args...);
//]]>
</script>

在插入firebug之前,使用firebug进行调试表明内容是正确的(即其中包含正常工作的自动完成代码)。

您的JS是否要在您通过ajax.updater加载的脚本标记中注册自动完成程序?如果是这样,您必须添加
evalScript
参数以对其进行评估:
new Ajax.Updater('target',url,{method:'get',evalScript:true})

好的,作为一个实验,我尝试如下更改我的自动补全器帮助程序代码,现在它工作正常:

发件人:

致:

这是在Rails助手中,但除非我误解了,否则我认为关键是通过声明一个变量,它会导致prototype在插入代码时实际计算新调用


(尽管如此,我们仍然欢迎更多/更好地了解为什么这个方法有效,而另一个方法无效,因为现在这主要是运气不好。)

我知道这是一个老问题,但最近我遇到了同样的问题

我不确定您使用的是什么版本的auto_complete?我使用的是git中的rails/auto_autocomplete

在该插件中,javascript代码如下所示

lib/auto_complete_macros_helper.rb

def auto_complete_field(field_id, options = {})
    function =  "var #{field_id}_auto_completer = new Ajax.Autocompleter("
我也有同样的问题。输入字段将可见,但自动完成功能不起作用。事实证明,var关键字使varaible成为本地范围

这意味着在evalscript中计算的任何内容都位于与原始DOM对象不同的范围内

我的补丁只是删除var关键字

lib/auto_complete_macros_helper.rb

def auto_complete_field(field_id, options = {})
    function =  "#{field_id}_auto_completer = new Ajax.Autocompleter("

我对您的设置了解不多,无法确定哪里出了问题,但我打赌这也与evalscript的范围有关。

谢谢您的尝试,但不幸的是,没有——为了更清楚起见,我添加了javascript函数,将新的部分添加到了我的原始问题中。我的意思是,使用
insert()。
javascript_tag("var autocomplete_for_#{fieldname} = new Ajax.Autocompleter(...
lib/auto_complete_macros_helper.rb

def auto_complete_field(field_id, options = {})
    function =  "var #{field_id}_auto_completer = new Ajax.Autocompleter("
lib/auto_complete_macros_helper.rb

def auto_complete_field(field_id, options = {})
    function =  "#{field_id}_auto_completer = new Ajax.Autocompleter("