2014-02-19 26 views
0

我有一個函數foo(peram),我想從多個jquery .keyup()事件調用。將函數傳遞給jquery關鍵事件?

如何定義/傳遞函數foo以便我可以從事件內部調用它?

我想是這樣的:

function foo(peram) { 
alert(peram); 
} 

$("#someElement").keyup(function(alert) { 
foo("You pressed a key!"); 
}); 

但是我得到TypeError: foo is not a function


更新:

我已刪除一切從我的腳本和HTML,它仍然無法正常工作。

HTML:

<html> 
    <head> 
    <script src="../jquery-1.10.2.js" type="text/javascript"></script> 
    <script src="test.js" type="text/javascript"></script> 
    </head> 
    <body onload="asdf()"> 
     <input type="text" name="name"> 
    </body> 
</html> 

test.js

function asdf() { 

function hqxftg(stuff) { 
    alert(stuff); 
} 

$(document).ready(function() { 
$('[name="name"]').keyup(function(hqxftg) { 
    alert(typeof hqxftg) 
    hqxftg("asdf"); 
}) 
}) 
} 

它似乎在的jsfiddle工作的某些原因。

+3

我能想到的唯一理由是'foo'方法在其他一些範圍是沒有申報您可以通過當前範圍 –

+1

訪問您是否在文檔準備好中定義了您的foo方法? –

+0

我認爲它有效。 jsfiddle.net/shyamchandranmec/56WaC/ – Konza

回答

2

這是因爲你有一個名爲事件參數相同功能

function asdf() { 

    function hqxftg(stuff) { 
     alert(stuff); 
    } 

    $(document).ready(function() { 
     $('[name="name"]').keyup(function (event) { 
      alert(typeof hqxftg) 
      hqxftg("asdf"); 
     }) 
    }) 
} 

事件回調keyup接收事件對象作爲第一個參數,y您將它命名爲hqxftg,它將覆蓋外部作用域函數名稱。

也沒有必要使用onload="",你可以只使用DOM準備回調

jQuery(function ($) { 
    function hqxftg(stuff) { 
     alert(stuff); 
    } 
    $('[name="name"]').keyup(function (event) { 
     alert(typeof hqxftg) 
     hqxftg("asdf"); 
    }) 
}) 
1

你缺少了幾件事...

1)您在調用foo()

2)你缺少標籤關閉jQuery選擇

結束錯過 ;

當您嘗試這一點,將工作:

function foo(peram) { 
    alert(peram); 
} 

$("#someElement").keyup(function(alert) { 
    foo("You pressed a key!"); 
}); 

JSFiddle here...

更新:發佈已更新,我的原創評論已過時。 我會去德里克的評論。

我能夠重現問題:JSFiddle

對不對你也foo聲明爲VAR?

+1

;是一個好主意,但不是強制性的 – mplungjan

+3

只有幾件事:1.';'在JavaScript中不是必需的。如果他錯過了一個'''',那麼他的代碼甚至不會跑到第一位。 –

+0

我忘記了那些問題,但我仔細檢查了一下,他們在我的實際代碼中。我在我的問題中運行了這個例子,但它仍然不適合我。 – gandalf3

0

試試看看這個代碼。 HTML

<input id="someElement" /> 

的Java腳本:

function foo(peram) { 
alert(peram); 
} 
$(document).ready(function() { 
    $("#someElement").keyup(function() { 
     foo("You pressed a key!"); 
    }); 
}); 

Demo

+0

仍然無法正常工作... – gandalf3

+0

你檢查過演示嗎? –

+0

是的,它在那裏工作。我會更詳細地更新我的問題。 – gandalf3