2012-04-14 57 views
1

在我的Rails应用程序即时发送Ajax请求加载撰写邮件形式的AJAX加载表格内工作jQuery的自动完成不轨

我compose.js文件的代码是

$(” #main')。html(“<%= j render:partial =>”smails/form“%>”);

现在在我的撰写形式我已经实现了一个自动填充字段使用jquery自动完成插件这是工作正常,当我加载没有AJAX的形式。我认为这是因为即时通讯使用document.ready,但我不知道如何使用其他任何东西。我autocomlete.js.coffee文件

代码

$(document).ready -> 
    split = (val) -> 
    val.split /,\s*/ 
    extractLast = (term) -> 
    split(term).pop() 
    $('#smail_receiver').autocomplete 
      source: "/autocomplete/users" 
      search: -> 
       term = extractLast(@value) 
       false if term.length < 2 
      focus: -> 
       false 
      select: (event,ui) -> 
       terms = split(@value) 
       terms.pop() 
       terms.push ui.item.value 
       terms.push "" 
       @value = terms.join(",") 
       false 

我也尝试document.on

+0

请更精确地说明发生了什么问题。浏览器控制台中是否有错误?如果你在'$('#smail_receiver')autocomplete'行之前放置'console.log'foo'',会发生什么? – 2012-04-14 14:39:25

回答

1

有可能是通过使用“的”约束力,但你可能只是打电话给你一个更好的方法:

$('#smail_receiver').autocomplete 

在创建窗体的ajax调用的成功方法中。表单呈现后,您也可以将它放入compose.js文件中。

如上所述,可能存在一个更加整洁的解决方案,但这可以解决问题。

+0

您的意思是在compose.js 中添加该行并从此处移除document.ready? – 2012-04-14 06:45:22

+0

嘿,好友仍然没有工作。请详细说明... – 2012-04-14 07:10:18

+0

是的,从document.ready中移除自动完成行,并将它们添加到compose.js中(在表单呈现之后)。这样你可以确定它被附加到呈现形式的控件上。如果它仍然无效,我会做一些试验和错误,看看是否有什么限制(即在该文本字段上的关键事件上发出警报)。如果可行,那么可能是在你的自动完成代码中。 – 2012-04-14 08:42:25