2013-04-22 138 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()

希望它的作品!