2013-09-01 33 views
0

我想解決以下情況:事件冒泡和鏈接事件的委託

我有一個鏈接,它有一個單擊事件(它執行一些Ajax操作)。點擊操作是默認的Rails,它將執行一個遠程操作(執行javascript)。我想要的是與單擊下面的HTML結構li元素時,調用此上單擊事件:

<li> 
    <img src="images/img.png" /> 
    <a href="/remote/path" data-remote="true">Link</a> 
</li> 

li元素上的點擊應該觸發點擊事件,並呼籲其他一些功能(在設置活動類李元素)。

的問題是:1。 如果我綁定李單擊事件並調用點擊鏈接時,會造成死循環 2.如果我把一個stopPropagation()的鏈接,也不會調用原始功能,執行遠程請求

什麼是最優雅的解決方案呢?

下面是我目前擁有的jcode:

$(document).ready(function() { 
    $("#some_list a").click(function(e) { 
     alert("action on a"); 
     e.stopPropagation(); 
    }); 

    $("#some_list li").click(function(e) { 
     alert("call some function"); 
     $(this).find('a').trigger("click"); 
    }); 
}); 

這不會引起遞歸循環,但它西港島線阻止我希望觸發的鏈接(通過導軌或UJS庫設置)的默認操作。

我想我必須改變鏈接上的點擊動作的順序,並在鏈接的最後一個動作之後改變stopPropagation()的順序?

或者也許有更好的解決方案來重構HTML並自己調用遠程函數?

感謝您的幫助

回答

0

你也可以做了window.location = 'anyurl',或AJAX。 嘗試是這樣的

$(function(){ 
var myobj = { 
clickedLi: function(){ 
     alert('clicked on li'); 
     return this; 
}, 
sendAnchor: function(url){ 
    alert(url); 
    return this; 
}         
}; 

$('ul').on('click', 'li', function(e){ 
e.preventDefault(); 
myobj.clickedLi().sendAnchor($(this).find('a').attr('href')); 

}); 
}); 

這裏工作示例 http://jsbin.com/oVAWEdob/2/edit

+0

那麼,它說,警報(URL)只是window.location的或任何AJAX調用替換。如果您有任何問題,請告訴我。 –