2013-04-22 121 views
1

我有这样的Rails的渲染Ajax错误

<div id="carte_items"> 
    <ul id="nav"> 
    <li id="category_14" class="category-group"> 
     <p class="category">Pizzas tradicionais</p> 

     <ul class="tags"> 
     <li> 
      <div class="links" style="display: none;"> 
      <a href="#" data-method="delete" data-remote="true" rel="nofollow"> 
       <i class="icon-trash icon-white"></i> 
      </a> 

      <a href="#" data-remote="true"> 
       <i class="icon-pencil icon-white"></i> 
      </a> 
      </div> 
      Pizza X 
     </li> 

     <li> 
      <div class="links" style="display: none;"> 
      <a href="#" data-method="delete" data-remote="true" rel="nofollow"> 
       <i class="icon-trash icon-white"></i> 
      </a> 

      <a href="#" data-remote="true"> 
       <i class="icon-pencil icon-white"></i> 
      </a> 
      </div> 
      Pizza X 
     </li> 
     </ul> 
    </li> 
    </ul> 
</div> 

所以一个index.html.erb,我已经在我的products.js.coffee

$("ul.tags li").on('mouseover',() -> 
$(this).find('.links').show() 
).on('mouseout',() -> 
$(this).find('.links').hide() 
) 

当我访问了第一次我的index.html.erb一切正常。但是对于像我第一次访问时那样的链接,我必须将products.js.coffee中的源复制到index.js.erb下面。就像我使用我的搜索一样,使用Ajax进行搜索,如果我不像以下那样复制源代码,“.links”不再显示。

他们我都像

$("#carte_items").html("<%= j(render 'carte_items') %>"); 
$("ul.tags li").on('mouseover', function() { 
    return $(this).find('.links').show(); 
}).on('mouseout', function() { 
    return $(this).find('.links').hide(); 
}); 

的index.js.erb的为什么要复制源?它不必很好地处理文件products.js.coffee中的源文件,而无需复制到index.js.erb?

感谢您的帮助。

+2

尝试使用'live'函数来绑定具有事件处理函数的元素...看看http://api.jquery.com/live/ – bernabas 2013-04-22 21:11:31

+1

嗨,jquery 1.9版本中的“live”已被删除。这在版本1.7上贬低了,就像您在链接中看到的那样,您发布了我。但是,谢谢。任何更多的帮助再次发送给我 – 2013-04-22 22:15:56

+0

您是否尝试'委托'而不是'开'? – cortex 2013-04-23 17:29:19

回答

2

试试这个:

$("ul.tags").delegate('li', 'mouseover',() -> 
$(this).find('.links').show() 
).delegate('li', 'mouseout',() -> 
$(this).find('.links').hide() 
) 

或:

$("ul.tags").on('mouseover', 'li',() -> 
$(this).find('.links').show() 
).on('mouseout', 'li',() -> 
$(this).find('.links').hide() 
) 
2

从jQuery的API文档:

.on()

说明:将一个事件处理函数的一个或多个事件到选定的元素。

.delegate()

说明:附加的处理程序,为选择器匹配的,现在或将来,基于一组特定的根元素的所有元素的一个或多个事件。

代表:“......现在或未来”。所以请尝试delegate()而不是on()

希望它的作品!