2014-10-20 121 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标签。