2012-09-26 65 views
0

這是我想做的事:我有這個處理程序處理鏈接的點擊:是否可以停止從元素開始的所有事件?

$('body').on('click', 'a.ajax.get', function(e){ 
    e.preventDefault(); 
    $.get($(this).attr('href'), function(){alert('Success!');}); 
}); 

後來我創造了這個處理程序,所以我可以要求用戶確認的動作發生之前:

$('body').on('click', 'a[data-confirmation]', function(){ 
    return confirm($(this).data('confirmation')); 
}); 

該處理器被放置在我的腳本的頂部

引起我的問​​題的標記是這樣的:

<a href="do/something/there" class="ajax get" data-confirmation="Are you sure you want to do that?"> 
    Click me! 
</a> 

我以爲它會做的是,當用戶點擊確認對話框「取消」,則回調將返回false和事件鏈將停止。這不會發生,無論用戶在確認框中選擇什麼,鏈接都會被「點擊」。

我做得不對,或者這是不可能的?

+0

嘗試像'如果(確認( '你確定嗎?'))......' – NoNameZ

+0

爲什麼(/會)你創建一個單獨的處理程序進行確認?我不明白你爲什麼不能將它與第一個處理程序結合起來。 –

+0

我希望能夠在任何元素上使用它,而不管它觸發什麼事件,這就是爲什麼。如果這是不可能的,我總是可以回到在.ajax.get處理程序上添加檢查... – Loupax

回答

1

試試這個

$('body').on('click', 'a[data-confirmation]', function(e) { 
    var check = confirm($(this).data('confirmation')) 
    if (!check) { 
     e.preventDefault(); 
    } 
    else { 
     $.get($(this).attr('href'), function() { 
      alert('Success!'); 
     }); 
    } 
});​ 

檢查FIDDLE

沒有請求被點擊

UPDATED FIDDLE

+0

只是去嘗試......不工作:/ – Loupax

+0

它爲我在上面的小提琴。沒有請求被在瀏覽器發送被點擊 –

+0

時取消就可以了它,只有這種情況下我想被取消。我更新了你的小提琴,所以你可以看到請求被髮送,無論你點擊http://jsfiddle.net/VHk6h/1/ – Loupax

1

時發送取消按鈕你可能會更好,一切都凝結成一個單一的功能,只要檢查當前點擊的元素是否具有data-confirmation屬性即可第二,如果是這樣,顯示確認(和處理它!)

$(document).ready(function() { 

    $('body').on('click', 'a.ajax.get', function(e) {  
    if($(this).data('confirmation') !== undefined) { 
     if(!confirm($(this).data('confirmation'))) { 
     e.preventDefault(); return false; 
     } 
    } 

    $.get($(this).attr('href'), function(){ 
     alert('Success!'); 
    }); 
    }); 

}); 

Here's a fiddle

相關問題