2011-06-09 16 views
5

我在我的DOM上使用event.preventDefault();代替ahref時遇到問題。我無法使用event.preventDefault();對於我的DOM上的ahref

如何防止URL發佈nofollow刪除,如使用JQuery的HTML所指定的?

<td class="trash_can"> 
<a rel="nofollow" data-remote="true" data-method="delete" data-confirm="Are you sure you want to delete Greek Theater at U.C. Berkeley?" href="/promotions/2/places/46"> 
<img id="trash_can" src="http://test.dev/images/trash.png?1305741883" alt="Trash"> 

下面的代碼應該顛覆HTML,但是HTML在發出「你確定」警告之前發佈刪除操作。沒有什麼是不工作的:

$(function(){ 
    $('.trash_can a').click(function(event) { 
    event.preventDefault(); 
    console.log('Clicked Delete'); 
    }); 
}); 

回答

7

有可能代替event.preventDefault()而不是return false。 preventDefault()方法阻止默認行爲,但該事件還是冒泡,有可能下一個處理程序,這可能是該軌處理程序弗雷德裏克指出:

$(rails.linkClickSelector).live('click.rails', function(e) { 
    var link = $(this); 
    if (!rails.allowAction(link)) return rails.stopEverything(e); 

    if (link.data('remote') !== undefined) { 
     rails.handleRemote(link); 
     return false; 
    } else if (link.data('method')) { 
     rails.handleMethod(link); 
     return false; 
    } 
    }); 
4

你在使用rails嗎?看起來像。

原因event.preventDefault()不起作用是因爲魔法在其他地方完成。 Rails帶有一些助手,它們爲Rails生成的所有「刪除」操作創建事件處理程序。所以在你的情況下,我認爲你需要找出如何覆蓋helpers或者只是爲特定的刪除操作創建一個自定義事件處理程序。

這是該軌JQuery的代碼使用:

https://github.com/rails/jquery-ujs/blob/master/src/rails.js

在此基礎上(從鏈接):

linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]' 

你的事件處理程序,如果你執行的唯一」 d從鏈接中刪除data-remote,data-methoddata-confirm

所以我建議你刪除它們,然後在你自己的點擊處理程序中重新創建你想要的任何行爲。

0

我面臨着同樣的問題,但沒有得到任何好幾個小時後,我的頭腦解決方案。所以,根據這裏提出的答案,我做了類似的:

function enableLink() { 
    jQuery("#link_id").removeClass("disabled"); 
    jQuery("#link_id").attr("data-remote", true); 
} 


function disableLink() { 
    jQuery("#link_id").addClass("disabled"); 
    jQuery("#link_id").removeAttr("data-remote"); 
} 

jQuery(document).ready(function(){ 
    jQuery(document).on("click", "disabled", function(e){ 
    e.preventDefault(); 
    }); 
}); 

我接受它不是一個好的解決方法。但是,那是什麼幫助了我。

相關問題