2014-02-05 30 views
1

我有一個click事件,以及事件處理程序中有我想要的點擊點擊的按鈕的改變類從一個(通過設置超時),以後執行的功能。如何爲點擊事件創建一個函數?

我這個嘗試,但沒有工作(見jsFiddle):

Button.click(function(){ 
    function myFunction(x,y){ 
     $(this).addClass(x); 
     alert(x); 

     $(this).addClass(y); 
     alert(y); 
    } 
}); 


setTimeout(function(){ 
    myFunction("aaa","bbb"); 
}, 100); 
myFunction("ccc","ddd"); 

我怎樣才能獲得在click事件之後的功能工作?
任何幫助表示讚賞。非常感謝你。

回答

0

功能myFunction定義在不同的詞彙範圍。

使用這個代替:

//You don't want to define the function each time the button is clicked 
function myFunction(x,y){ 
    $(this).addClass(x); 
    alert(x); 

    $(this).addClass(y); 
    alert(y); 
} 

Button.click(function(){ 
    var self = this; 
    setTimeout(function(){ 
     myFunction.call(butto, "aaa","bbb"); 
    }, 100); 
}); 
4

你myfunction的()只被定義,如果被點擊的按鈕。嘗試採購它:

var Button = $("#button"); 

function myFunction(x,y){ 
    Button.addClass(x); 
    alert(x); 

    Button.addClass(y); 
    alert(y); 
} 

Button.click(function() { 
    myFunction('aaa','bbb'); 
}); 

setTimeout(function(){ 
    myFunction("aaa","bbb"); 
}, 100); 

myFunction("aaa","bbb"); 
+3

此代碼永遠不會上點擊運行「myFunction的」,它在腳本加載,而不是立即評估和「點擊()」只接收「未定義「而不是回撥功能 –

+0

哦 - 你是對的 - 謝謝!修復! –

+0

謝謝克里斯!抱歉,但點擊不起作用! 「我想要點擊後執行功能來改變所點擊的按鈕的類別」。 –

1

我認爲這是你要找的。它與其他答案類似,但僅在單擊按鈕時調用該函數。

var button = $('button#test'); 

function myFunction(x,y){ 
    button.addClass(x); 
    alert(x); 

    button.addClass(y); 
    alert(y); 
} 

button.click(function(){ 
    myFunction("aaa", "bbb"); 
}); 

我已經更新這裏的小提琴:http://jsfiddle.net/mFd5K/3/

+0

非常感謝你,但我想用'setTimeout'來改變Class。按照你在任何時候提出的建議,我必須點擊才能更改課程。 –

+0

您可以將'setTimeout'調用移動到'click'回調函數中。我不是100%確定你想要達到的目標,但我希望你能從這裏得到正確的答案:) –

相關問題