2013-07-31 38 views
0
停用嵌套匿名函數

我有以下代碼:如何在jQuery中

$('#button-a').click(function(){ 
    $('#button-b').click(function(){ 
     alert('something'); 
    }); 
}); 
$('#button-b').click(function(){ 
    // do something 
}); 

我怎樣才能取消嵌套#按鈕-B功能我已經按下#按鈕一之後,所以只有最後一個# button-b函數(不是嵌套的)當我點擊#按鈕-b而不是它們時激活?

+0

你的意思是刪除事件嗎?如果是這樣,你可以做$('#button_b')。unbind('click') – lomas09

+0

但是,爲此你必須首先附加這樣的事件:$('#button_b')。bind('click',function ){}); – lomas09

+0

@ lomas09不,你不需要。 –

回答

1

嘗試使用.on().off()事件處理程序。

$('#button-a').click(function(){ 
    $('#button-b').off('click'); //unbind the click event of the #button-b 
    $('#button-b').click(function(){ 
     alert('something'); 
    }); 
}); 
$('#button-b').on('click',function(){ 
    // do something 
}); 
0

爲了做到這一點,你的功能不能是匿名的。您需要使用off的格式,它指定要刪除的處理程序。重寫你的代碼了一下,它會是這個樣子:

function myFunc() { 
    alert('something'); 
} 

$("#button-a").click(function() { 
    $("#button-b").click(myFunc); 
}); 

$("#button-b").click(function() { 
    // do something 
}); 

要刪除的處理程序,你會使用:

$("#button-b").off('click', myFunc); 

我不太清楚其中你想要這個發生,但上面的代碼行可以在任何DOM已經加載並且在範圍內的任何地方工作。

0

如果你覺得你肯定在這裏需要一個匿名處理,你可以使用事件命名空間爲您的任務 - http://api.jquery.com/on/

 
    $('#button-b').on('click.nestedClick', function(){ 
     alert('something'); 
    }); 
    // and unbind it at some point: 
    $('#button-b').off('click.nestedClick'); 

0
$('#button-a').click(function(){ 
    $('#button-b').trigger('click'); 
}); 
$('#button-b').click(function(){ 
    // do something 
}); 

改變你這樣的代碼,以便它調用您的按鈕最後一個函數-b當你點擊按鈕-a

+0

你錯了,他想阻止'#button-b'的點擊事件。但是你的代碼觸發點擊。對? – Praveen

+0

他只是想調用最後一次點擊按鈕並阻止點擊,所以我認爲這是正確的 – GeniusJRS