2012-12-04 56 views
0

我們如何可以調用start()方法JavaScript函數針對這種情況,從HTML如何調用javascript函數從HTML

(function() { 
     var never, start; 

     never = function() { 
     return alert("try"); 
    }; 

     start = function() { 
     return alert("try harder"); 
    }; 


    }).call(this); 

我的HTML

<input type="button" value="press" onclick="never()" ></input> 
+0

你應該考慮轉換你提供給一個類的腳本。 – povilasp

+0

完全是這樣的,但'永不'不是全球性的,因此無法找到。 –

回答

4

當您將事件處理代碼的屬性,任何使用的函數需要在全局變量作用域中可用。

要做到這一點,您可以使它們的屬性爲window。目前,您的neverstart功能對於IIFE功能範圍是本地的。

// IIFE function 
(function() { 

    // var never, start; // local variables 

    // Make the functions globally scoped 
    window.never = function() { 
     return alert("try"); 
    }; 

    window.start = function() { 
     return alert("try harder"); 
    }; 
}).call(this); 

,如果你喜歡

// IIFE function 
(function() { 

    var ns = window.ns = {}; 

    // Make the functions globally scoped 
    ns.never = function() { 
     return alert("try"); 
    }; 

    ns.start = function() { 
     return alert("try harder"); 
    }; 
}).call(this); 

您可以公開一個命名空間,然後改變你的內嵌處理器使用ns.never();ns.start();

+0

好的,所以我們可以使用this.start()或windows.start()來調用函數,但即時編譯它從coffeescript,它不會產生這個或窗口..(我也需要保持範圍本地).. – Moniv

+0

@Moniv:本地作用域意味着函數將無法訪問。你需要以某種方式暴露他們以達到他們。即使它們都在名稱空間中。 –

+0

好吧,我以某種方式管理,通過本地變量也..感謝 – Moniv

2

首先給你的輸入標籤的ID:

<input id="someInputField" type="button" ... /> 

下一頁通過執行代碼,註冊就可以了回調時,該文件已準備就緒:

$(document).ready(function() { 
    // define a function called never 
    function never() { 
     alert('Never say never'); 
    } 

    // register a function on the click event handler of that input tag: 
    $('#someInputField').click(never); 
}); 
+0

+1使用document.ready和unobtrusive JavaScript。 OP - 即使你沒有完全做到這一點,這仍然是你應該爭取的代碼類型。出於多種原因,對行爲使用HTML屬性(「onclick」等)通常是不被接受的。 – Shauna

+0

這個工作,但即時編譯從咖啡的腳本,它產生與我寫的相同的.js – Moniv

+0

@Shauna:那麼做'onclick =「start()」'是突兀的,但不知怎的,它不是突兀的做id =「someInputField」,並等待DOM加載,並手動分配一個處理程序?無論哪種方式,你都將代碼鏈接到HTML。 –

2

您可能會發現它更容易使用JavaScript像jQuery這樣的庫。使用這個庫你可以做到這一點:

<script type="text/javascript"> 
    $(document).ready(function() { 
     var count = 0 
     $("#tryme").click(function() { 
      if (count == 0) { 
       alert('try'); 
       count++ 
      } 
      else if (count == 1) { 
       alert('try harder'); 
      } 
     }); 
    }); 
</script> 

<input type="button" value="press" id="tryme" ></input>