2013-07-19 60 views
-1

我是jQuery的新手,並且遇到了一些問題。這個jsFiddle顯示我正在經歷的事情:http://jsfiddle.net/rE2FH/5/請注意按鈕如何不起作用。jQuery .click()和alert()問題

我想要做的是設置一個點擊偵聽器的按鈕,並讓它做一個alert();.但是,click事件或alert()都不起作用。

我已經嘗試點擊事件作爲.click(),.on(),.delegate()和.live()這似乎沒有工作。至於警報,我找不到相當於「它自動工作,如果你做'警報([刺痛])等同的東西;'!」我知道.click()是1.7+,.live()是折舊的,甚至是.delegate()比它優先。

在我當前的項目中,我使用jsp與腳本 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js"></script>然而,它不在jsFiddle中工作。這個版本可以在我們的其他頁面(alert和.click事件)上正常工作,但由於某種原因,我目前正在使用的那個版本有問題。我盡我所能去模仿其他頁面,但我可能會錯過一些東西。那個寫jQuery的人不在我們公司了。

我已經搜查SO,沒有這些結果都爲我工作:

jQuery .click() not functioning

jQuery .click() problem

jquery button not respond to click method

jquery click event issues

+人,一直以來都同樣的線條。

任何有識之士將不勝感激。

+0

你有一些語法錯誤和對功能的誤解離子:http://jsfiddle.net/e8Nrz/ – Ian

回答

2

您有幾個問題。確保你檢查了javascript控制檯的錯誤。這裏有一個工作版本:

http://jsfiddle.net/LxuVy/

$(document).ready(function(){ 
    $(document).delegate('#but', 'click', buttonClick); 

    function buttonClick() { 
     $('#res').hide().html("BUTTON!!!").fadeIn('fast'); 
     alert("Hello!"); 
    } 
}); 

要打破這些問題與你:

$(document).ready(function(){ 
    $.delegate('#but', 'click', buttonClick()); 

    function buttonClick(){ 
     $('#res').hide().html("BUTTON!!!").fadeIn('fast'); 
     alert("Hello!"); 
    }; // this semi-colon shouldn't be here 
}; // missing closing paren for ready() 

delegate這樣使用:

$('selector').delegate(...) 

雖然delegate()已更換通過on() ,應該用它來代替。

另外,buttonClick()應該是buttonClick。當你添加括號時,你是執行的函數。在這種情況下你想要做的是通過函數作爲參數。

+0

這工作!謝謝!這實際上澄清了一些代碼,我不確定我在項目的其他地方看到了什麼。我也得到了.on()的工作。\ – sparks

+0

很高興我能幫上忙! –

1

多重問題。

首先,你需要選擇與授權(最接近靜態父)元素

$(document).delegate(...) 

對參數的功能不應該用方括號的

$(document).delegate('#but', 'click', buttonClick); 

光潔度和你缺少一個右括號。

小提琴:http://jsfiddle.net/rE2FH/18/

但你的按鈕是靜態的,你可以使用直接點擊:

$('#but').click(buttonClick); 

此外,委託已過時,你應該使用.on()

1

我看到三個問題:

  1. .delegate也已經過時,你應該使用.on。您也可以直接撥打電話$。最後,you're not actually delegating the event to any ancestor,所以你可以直接使用.click

  2. 而不是在綁定事件時傳遞函數引用,而是調用函數(您正在傳遞buttonClick()而不是buttonClick)。

  3. 你忘了在最後關閉括號,導致語法錯誤(總是檢查你的瀏覽器的控制檯,它會顯示這種錯誤)。

解決所有這些問題,你的代碼是:

$(document).ready(function(){ 

    // using .click instead of .delegate 
    // .on('click', buttonClick) would work too 
    $('#but').click(buttonClick); 
    // no calling parentheses -^ 

    function buttonClick(){ 
     $('#res').hide().html("BUTTON!!!").fadeIn('fast'); 
     alert("Hello!"); 
    } 
}); 
// added missing) at the end 
2

你缺少從的document.ready收盤)

$(document).ready(function(){ 
    $.delegate('#but', 'click', buttonClick()); 

    function buttonClick(){ 
     $('#res').hide().html("BUTTON!!!").fadeIn('fast'); 
     alert("Hello!"); 
    }; 
}); 

我也建議使用.on()這樣:http://jsfiddle.net/rE2FH/23/