2014-10-20 102 views
2

我想調用java腳本中的jquery函數。我的代碼是:如何從Jquery函數調用javascript?

<script type="text/javascript"> 
    function calljs(){ 
     getUserMail(usermMail); 
     } 

    $(function() { 
     function getUserMail(usermMail) { 
     ***some code***** 
     } 
    }); 
</script> 

我從瀏覽器控制檯錯誤:

ReferenceError: getUserMail is not defined.

如何解決這個問題呢?

+2

對於'calljs'函數,沒有'getUserMail'函數來訪問。 – 2014-10-20 06:10:30

+0

它不能從另一個函數中調用另一個函數中的函數。 – Ravi 2014-10-20 06:13:00

+0

如果可能的話從java腳本中調用jquery函數。 – nmkkannan 2014-10-20 06:14:09

回答

1

如果真的強制把函數在jQuery的準備回調(這我不認爲是強制性的)使用以下方式

<script type="text/javascript"> 
    var getUserMail = null; 
    function calljs(){ 
     if (null !== getUserMail) { 
      getUserMail(usermMail); 
     } 
    } 

    $(function() { 
     getUserMail = function (usermMail) { 
     ***some code***** 
     } 
    }); 
</script> 
+1

它工作得很好。謝謝.. – nmkkannan 2014-10-20 06:52:09

3

據我所知,方法被調用時沒有定義方法。所以把它定義獲取調用

之前
<script type="text/javascript"> 

    function getUserMail(usermMail) { 
     ***some code***** 
    } 

    function calljs(){ 
     getUserMail(usermMail); 
     } 

    $(function() { 
     // 
    }); 
</script> 

希望它有助於

0

你可以簡單地做,

$(document).ready(function(event) { 
      getUserMail(usermMail); 
     }); 

,並定義它像,

function getUserMail(usermMail){ 
. . . 
} 

或使用jQuery

$(document).on('click', ".selector", function); 

觸發一個事件的函數

0

getUserMail未在scope中定義,calljs可訪問該scope。這就是爲什麼你得到ReferenceError;在您嘗試調用getUserMail的上下文中,沒有可用該名稱的函數。

// At this point nothing is defined 
    function calljs(){ 
     getUserMail(usermMail); 
    } 
    // now calljs is defined as a global and can be invoked from anywhere 


    $(function() { // this line is calling a function named $ (an alias for jQuery) 
       // and passing it an anonymous function as a parameter. 
     function getUserMail(usermMail) { // This function is being defined inside 
             // the scope of the anonymous function, 
             // it can be used anywhere inside the 
             // anonymous function but not outside it. 
     // ***some code***** 
     } 
    }); 
    // we are now outside the scope of the anonymous function, 
    // getUserMail is no longer in our scope and can't be called from here. 

在大多數情況下,最簡單的和可能最好的辦法是,以確保相互調用的任何功能都在同一範圍內。

從我能告訴你真的不需要calljs,你只是試圖用它來戳一個洞,在其中定義了getUserMail的匿名函數的範圍。

相反,你應該擺脫calljs和移動正在調用getUserMailready回調的任何代碼。如果getUserMail在調用之前需要等待ready回調被觸發,那麼調用它的任何代碼也應該在ready回調中。 (像事件處理程序,它稱爲它應該已經在ready回調裏面)

如果有一個原因,你不能將它移動到ready回調,如另一個.js文件中的東西需要能夠稱之爲等等,你的應用程序可能太複雜,不能像jQuery soup那樣被實際維護。將它移植到框架如EmberAngular可能是值得的。

也爲了便於掌握,您的script標籤上有no need to use the type attribute。JavaScript是唯一在瀏覽器中擁有廣泛支持的語言,所有瀏覽器默認使用JavaScript來代替script標籤。