【问题标题】:Uncaught ReferenceError: MyFunction is not defined - PhoneGap未捕获的 ReferenceError:未定义 MyFunction - PhoneGap
【发布时间】:2013-05-21 14:15:36
【问题描述】:

我正在将 PhoneGap 和 jQuery Mobile 用于移动 Web 应用程序。当我尝试运行在 onclick 属性上设置的 MyFunction 时,我在控制台中收到一个错误,

未捕获的 ReferenceError:未定义 MyFunction。

这是我的代码:

<!DOCTYPE html>
<html>
<head>
 <title>Product</title>

<meta name="viewport" content="width=device-width, initial-scale=1">

<link rel="stylesheet" type="text/css" href="css/index.css" />
<link rel="stylesheet" href="css/jquery.mobile-1.3.1.min.css" />
<script type="text/javascript" src="cordova-2.7.0.js"></script>
<script type="text/javascript" src="js/index.js"></script>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="js/jquery.mobile-1.3.1.min.js"></script>



<!--Generation Script Starts here -->
<script type="text/javascript">
function makeid()
{
    var text = "";
    var possible = "123456789";

    for( var i=0; i < 4; i++ )
        text += possible.charAt(Math.floor(Math.random() * possible.length));

    return text;
}

function makeid1()
{
    var text1 = "";
    var possible = "123456789";

    for( var i=0; i < 1; i++ )
        text1 += possible.charAt(Math.floor(Math.random() * possible.length));

    return text1;
}

function makeid2()
{
    var text2 = "";
    var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    for( var i=0; i < 1; i++ )
        text2 += possible.charAt(Math.floor(Math.random() * possible.length));

    return text2;
}

function makeid3()
{
    var text3 = "";
    var possible = "123456789";

    for( var i=0; i < 2; i++ )
        text3 += possible.charAt(Math.floor(Math.random() * possible.length));

    return text3;
}

function myFunction()
{
              document.getElementById("demo").innerHTML="D01E-BOA0-" + makeid() + "-" + makeid1() + makeid2() + makeid3();
}

</script>
<!-- Generation Script Ends Here -->

</head>
<body>

<div data-role="page">

<div data-role="header" data-theme="b">
    <a href="index.html" data-role="button" data-icon="home" data-iconpos="notext" data-theme="b" data-iconshadow="false" data-inline="true">Home</a>
    <h1>Product</h1>
</div><!-- /header -->

<div data-role="content">


    <p id="demo" style="text-align:center;"></p>

    <input type="button" onclick="myFunction()" value="Generate!" data-theme="b">
</div><!-- /content -->


</div><!-- /page -->

</body>
</html>

【问题讨论】:

  • 为什么要导入两次jQuery?
  • 在您的实际代码中,您声明了myFunction 并调用了myFunction(),但您发布的错误消息显示为Uncaught ReferenceError: MyFunction is not defined。注意大写的“M”。 JavaScript 区分大小写。确保你没有把它们混在一起
  • 它对我有用,没有任何错误。检查FIDDLE
  • 它可以在我的电脑上运行,但是当我在 android 上执行它时会出现问题。这是错误日志的图片gyazo.com/5784e0b14b7306dc746fae530ef8c9d4
  • @user2405869 这个FIDDLE怎么样?

标签: javascript cordova


【解决方案1】:

我不确定这是否有帮助,请将您的所有代码包装到准备好的文档中,并且 用jQuery处理按钮的click

<input type="button" id="generate" value="Generate!" data-theme="b">


$('#generate').on('click', function () {
    $("#demo").html("D01E-BOA0-" + makeid() + "-" + makeid1() + makeid2() + makeid3());
});

完整代码:

$(function () {

    function makeid() {
        var text = "";
        var possible = "123456789";

        for( var i=0; i < 4; i++ ) {
            text += possible.charAt(Math.floor(Math.random() * possible.length));
        }

        return text;
    }

    function makeid1() {
        var text1 = "";
        var possible = "123456789";

        for( var i=0; i < 1; i++ ) {
            text1 += possible.charAt(Math.floor(Math.random() * possible.length));
        }

        return text1;
    }

    function makeid2() {
        var text2 = "";
        var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

        for( var i=0; i < 1; i++ ) {
            text2 += possible.charAt(Math.floor(Math.random() * possible.length));
        }

        return text2;
    }

    function makeid3() {
        var text3 = "";
        var possible = "123456789";

        for( var i=0; i < 2; i++ ) {
            text3 += possible.charAt(Math.floor(Math.random() * possible.length));
        }

        return text3;
    }

    $('#generate').on('click', function () {
        $("#demo").html("D01E-BOA0-" + makeid() + "-" + makeid1() + makeid2() + makeid3());
    });

});

选中此FIDDLE 以在 android 上进行测试。

【讨论】:

    【解决方案2】:

    这可能会解决您的问题:

    1. 为你的身体添加一个 onLoad 的监听器:

      &lt;body onLoad="fireItUp()"&gt;

    2. 使用被调用的方法为cordova的deviceready添加一个事件监听器:

      function fireItUp() {
      document.addEventListener("deviceready", onDeviceReady, false);
      
      }
      
    3. 使用回调方法将您的事件绑定到 jquery mobiles 'tap' 事件(您可能希望给按钮一个 id 或类,因为这会绑定到所有输入元素,这可能是不希望的):

      function onDeviceReady() {            
          jQuery(input).bind('tap',function(event){
          myFunction();
          });
      }
      

    【讨论】:

    • 对不起:/我不明白。我为 fireItUp() 和 cordova 的事件侦听器服务,但我应该如何处理第 3 步? :S
    • 只需将其放入您的 Javascript 中即可。它是方法,将在设备准备好后调用。然后它将 jquery mobiles 自己的触摸事件版本绑定到 html 中的所有输入元素。这就是为什么我说,你可能想给你的 click 元素添加一个 id 然后做: jQuery("#myClickElement").bind(...
    • 它仍然无法正常工作。我们可以用Skype或其他方式谈谈吗?这样解决这个问题要容易得多。
    • 其实这个平台更多的是提供建议和帮助你学习,而不是针对特定问题提供现成的解决方案。我建议你阅读一些教程,cordova 指南并重新开始,最终你会自己弄清楚,这将是非常有益的。
    猜你喜欢
    • 2013-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 1970-01-01
    • 2016-04-04
    • 1970-01-01
    相关资源
    最近更新 更多