【问题标题】:function in javascript is not definedjavascript中的函数未定义
【发布时间】:2012-07-04 15:59:33
【问题描述】:

我在下面有这个 js 和 qunit 测试。为什么浏览器给我的 listClasses 没有定义?如何解决它。我看到的大部分都做了

function ajax() {  
$.ajax({   
});}

但是如果我确实喜欢下面的测试,该怎么做?

$('#MregisteredClasses').on('pageinit', function listClasses(){
var rowInput = "1";
var pageInput = "1";

$.ajax({
    url: 'http://137.57.102.146:8080/Training/getRegisteredClassesData.html',
    data: ( {rows : rowInput , page : pageInput}),
    type: 'POST',

    success: function(json_results){
    $('#list').append('<ul data-role="listview" data-inset="true"</ul>');
        listItems = $('#list').find('ul');
        $.each(json_results.rows, function(key) {
            html = "<li data-mini='true' id='icon'><a href='http://137.57.102.146:8080/Training/MRegisteredClassesDetail.phone?courseId=" 
                   + [json_results.rows[key].courseId] + "&regNo=" + [json_results.rows[key].regNo] +
                   "' rel='external'>" + json_results.rows[key].courseName+ "</a>"
                   + "<a href='http://137.57.102.146:8080/Training/MRateCourse.phone?courseId=" 
                   + [json_results.rows[key].courseId] + "&regNo=" + [json_results.rows[key].regNo] + 
                   "' rel='external'>RATE THIS COURSE</a></li>" ; 
            listItems.append(html); 
        });

        $('#list ul').listview(); 
    },
});
});

这是 qunit 测试

 test('asynchronous test', function() {  
// Pause the test, and fail it if start() isn't called after one second  
stop();  

listClasses(function() {  
    // ...asynchronous assertions  
    ok(true, "Success"); 
});  

setTimeout(function() {  
    start();  
}, 2000);  
});  

【问题讨论】:

    标签: javascript ajax function qunit


    【解决方案1】:

    函数声明命名函数表达式之间有a difference

    声明的格式为:

    function myFunc() {
        /* body */
    }
    

    表达式就是一切:

    var x = function myFunc() {
        /* body */
    };
    
    // or
    
    alert(function myFunc() {
        / * body */
    });
    

    当函数表达式在function 关键字之后有一个名称时,该函数只能在函数体内通过该名称访问。因此你的问题。

    var x = function myFunc() {
        /* body */
    };
    
    x(); // okay
    myFunc(); // reference error
    

    Named function expressions demystified 中的更多信息。

    【讨论】:

      【解决方案2】:

      $('#MregisteredClasses').on('pageinit', function listClasses(){ ... 用法不正确。

      函数要么需要匿名(即删除listClasses 位),在这种情况下运行listClasses() 将失败。

      你需要做的是外部化函数声明。

      即:

      function listClasses(){
        var rowInput = "1";
        var pageInput = "1";
      
        $.ajax({
          url: 'http://137.57.102.146:8080/Training/getRegisteredClassesData.html',
          data: ( {rows : rowInput , page : pageInput}),
          type: 'POST',
      
          success: function(json_results){
          $('#list').append('<ul data-role="listview" data-inset="true"</ul>');
              listItems = $('#list').find('ul');
              $.each(json_results.rows, function(key) {
                  html = "<li data-mini='true' id='icon'><a href='http://137.57.102.146:8080/Training/MRegisteredClassesDetail.phone?courseId=" 
                         + [json_results.rows[key].courseId] + "&regNo=" + [json_results.rows[key].regNo] +
                         "' rel='external'>" + json_results.rows[key].courseName+ "</a>"
                         + "<a href='http://137.57.102.146:8080/Training/MRateCourse.phone?courseId=" 
                         + [json_results.rows[key].courseId] + "&regNo=" + [json_results.rows[key].regNo] + 
                         "' rel='external'>RATE THIS COURSE</a></li>" ; 
                  listItems.append(html); 
              });
      
              $('#list ul').listview(); 
          }
      });
      }
      

      然后从on命令调用函数:

      $('#MregisteredClasses').on('pageinit', listClasses)
      

      假设您的脚本仅在 listClasses() 上失败,那么我会假设 listClasses 名称只是静默删除。

      【讨论】:

      • Joe bowman:我尝试你的答案比它显示这个错误 Uncaught TypeError: Object [object Object] has no method 'listview' Source: 137.57.102.146:8080/Training/js/MRegisteredClasses.js:23
      • 如错误所说,$('#list ul') 返回的对象没有listview() 函数。 listview 是在哪里定义的?
      • $('#list ul').listview();这不是定义列表视图吗?
      • 不——这是在调用 listview() 函数。该函数必须在别处定义,才能被调用。您是否需要在某个包含 listview 函数的地方包含另一个脚本文件?
      • 我不明白。 listview 是 jquerymobile 的方法。我说的对吗?
      猜你喜欢
      • 2011-05-21
      • 2017-06-06
      • 1970-01-01
      • 2011-09-25
      • 2018-01-08
      • 2020-09-11
      • 2018-01-14
      • 2021-12-30
      • 1970-01-01
      相关资源
      最近更新 更多