2015-06-21 47 views
0

我有推出一些JavaScript代碼上的一個按鈕的功能單擊訪問一個JavaScript函數的函數內HTML

"<input type='text' id='myTest' value='user input' /><input type='button' value='submit' onclick='myFunction();' />" 

這工作時myFunction的()是我的javascript的頂級水平,但它需要在另一個功能內。這可能嗎???

+2

內嵌HTML事件屬性只能訪問JS的全球範圍。所以如果你爲它添加一個全局級別的引用,或者如果你在你的JS(而不是內聯)中的某個可以訪問該函數的點綁定你的事件處理程序,你可以訪問你的嵌套函數。 – nnnnnn

+2

我想這取決於你的意思是「它需要在另一個功能中」。一個完整的例子有助於 –

+0

我認爲@ alex436的答案有一個工作的例子,但我真的很好奇這個用例以及爲什麼它需要表單的提交處理程序是函數中的一個函數。 – tavnab

回答

0

我認爲這就是你想要的?

document.addEventListener("DOMContentLoaded", function(event) { 
    var myEventListener = new myFunc1(); 
    document.getElementById(mybutton).onclick(myEventListener.myFunc2); 

    function myFunc1(){ 
     this.myFunc2 = function(){ 
      //DO STUFF... 
     } 
     //DO OTHER STUFF 
    } 
} 

HTML:

<input id="mybutton" type='button' value='submit'/> 
+1

'myFunc1.myFunc2'和'this.myFunc2'完全錯誤。 –

+0

你能解釋一下你的意思嗎? – alex436

+0

函數'myFunc1'沒有'myFunc2'屬性。 myFunc1'內部的代碼從未執行,因爲你沒有調用'myFunc1',因此'myFunc2'永遠不會被創建。但是,即使你調用了myFunc1,this也不會引用函數對象本身。所以它仍然不會創建'myFunc1.myFunc2'。看看https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/這個瞭解更多關於'this'的信息。 –

0

它的範圍的問題。您的DOM中的onclick範圍無法看到您的功能內功能&,因此無法調用它。如果你想使用onclick,則需要在全球範圍內來定義函數(或者更好的是,使用jQuery與.click().on('click', ...))。

0

這不是一個很好的解決方案,但它的需要初始化函數用於註冊內部功能的缺陷工作。

function fn() { 
    function pi() { 
     document.getElementById('myTest').value = Math.PI; 
    } 
    if (fn.pi) { 
     // this is the part for the usual function body 
     // skips at the first call 
     return 777; 
    } 
    // make pi public 
    fn.pi = pi; 
} 
fn(); // init function 

添加一些合適的地方:

<form> 
    <input type='text' id='myTest' value='user input' /> 
    <input type='button' value='submit' onclick='fn.pi();' /> 
</form>