2013-11-25 50 views
0

在我的document.ready(),我有幾個按鈕(a,b,c)和點擊時,他們調用一個特定的方法。但是,當我點擊按鈕(d)時,我需要按鈕(a,b,c)來停止調用它們的特定方法,並且單擊時不執行任何操作。我嘗試使用preventDefault()方法,但它不起作用。有人請幫忙!感謝提前:)Javascript在點擊事件不工作的功能,但在document.ready()

$(document).ready(function(){ 
    ... 

    // my buttons (a,b,c) which call method fA 
    $("#a, #b, #c").on("click", fA); 

    // my button (d) which call method fB 
    $('#d').on("click", fB); 

    ... 
}); 

// When button (d) is clicked, I want buttons a,b,c to be non-clickable and this method should not be called. 
function fA() { 
    // does a AJAX request 
    $.ajax({ 
    url: ..., 
    data: ..., 
    dataType: "script" 
    }); 
} 

function fB() { 
    $("#a, #b, #c").on("click", function(e) { 
    e.preventDefault(); // THIS IS NOT WORKING! 
    }); 
    ... 
    //Does its own unique AJAX request 
} 
+3

你可以禁用的按鈕:'$( 「#A,#B,#C」)丙( '禁用',真)' –

+2

你的 「解決方案」 不工作因爲只需在按鈕中添加一個新的事件處理程序。現有的一個不會被替換,當你點擊任何一個按鈕時,這兩個都會被調用。 –

回答

3

當你調用.on(),事件處理程序不更換 —他們添加。任何元素可能有許多事件處理程序用於同一事件。你正在成功添加新的「點擊」處理程序,但舊的仍然存在。

您可以使用.off()刪除所有處理程序的特定事件。

$('#a, #b, #c').off("click"); 

如果你想一些現存的處理器要暫時停用,您可以直接設置所涉及的元素「已禁用」屬性(只要它們是在正確的種元素),或者使用一些萎靡不振的機制你自己。

作爲「標記」的一個例子,知道什麼時候該處理器應該/不工作,你可以使用一個類:

function fA() { 
    if ($(this).hasClass('inactive')) return; 

    // does a AJAX request 
    $.ajax({ 
    url: ..., 
    data: ..., 
    dataType: "script" 
    }); 
} 

function fB() { 
    $("#a, #b, #c").addClass('inactive'); 
    // ... 

當你想要的「A」功能重新開始工作,你可以只刪除類:

$('#a, #b, #c').removeClass('inactive'); 
+0

這很好,但現在讓我們說當我有一個按鈕e,它調用方法fC,這個方法應該重新啓用點擊事件和按鈕a,b,c應該再次調用方法fA。我嘗試使用$('#a,#b,#c')。on(「click」);但它似乎沒有工作。 – Rahul

+0

@Rahul yes,'.off()'刪除所有分配的處理程序;基本上,它們被移除並扔掉。這就是我保持旗幟的意思。我會延長答案。 – Pointy

+0

太棒了!這就像一個魅力!謝謝@Pointy :) – Rahul

1

更改功能的FB:

function fB() { 
    $("#a, #b, #c").off("click"); 
    ... 
    //Does its own unique AJAX request 
}