找不到定义的功能

时间:2013-01-21 10:11:46

标签: javascript jquery

我有一个在for循环中调用的函数。

 function printResult(name, i) {

$('#list').append("<a href='#' onClick='goto(" + i + ");' class='item'><H1>" + name + "</H1>    </a>");
 }

a href-tags会按原样附加,但是当我调用goto函数时,firebug说:'goto未定义'

但它是!!

这是功能:

function goto(myPoint){
      map.setCenter(new google.maps.LatLng(marker[myPoint-1].position.lat(), marker[myPoint-      
      1].position.lng()));
     markerArr[myPoint-1]['infowindow'].open(map, markerArr[myPoint-1]);
  }

我对于找不到该功能的原因一无所知。它是否与附加的href-tag中调用它有关?

4 个答案:

答案 0 :(得分:1)

goto()是函数的可怕名称,因为它通常用作许多编程语言中的关键字。

在Javascript中,它不是关键字。但是,它 a reserved word,理由是它可能会在未来版本的语言中使用。仅此一点可能导致JS拒绝您的功能或无法调用它。

但即使它不是保留的,也可能被视为潜在的歧义,因此不建议使用。

因此,我的建议是更改功能名称。幸运的是,它可能神奇地开始工作。

答案 1 :(得分:0)

使用onclick属性定义事件处理程序时,goto() 的定义必须是全局,即window.goto必须存在。

更重要的是,这不是jQuery方式;事件处理程序应该用JavaScript代码而不是HTML来定义。

function printResult(name, i) 
{
    var $title = $('<h1 />', { text: name }),
    $anchor = $('<a href="#" class="item" />')
        .append($title)
        .on('click', {
            index: i
        }, moveToIndex)
        .appendTo('#list');
}

// this is the click handler
function moveToIndex(evt)
{
    // evt.data.index = the value of i
}

我已将您的goto()功能重命名为moveToIndex(),这更具描述性。这不应该与您当前的代码具有相同的范围问题。

答案 2 :(得分:0)

使用这样的jQuery点击事件:

HTML:

function printResult(name, i) {
    $('#list').append("<a href='#' rel='" + i + "' class='item'><H1>" + name + "</H1></a>");
}

JS:

$(document).on('click', 'a.item', function (e) {
   goto($(this).attr("rel"));
});

但我建议将函数goto重命名为其他内容或执行:

$(document).on('click', 'a.item', function (e) {
   var myPoint = $(this).attr("rel");
   map.setCenter(new google.maps.LatLng(marker[myPoint-1].position.lat(), marker[myPoint-      
  1].position.lng()));
   markerArr[myPoint-1]['infowindow'].open(map, markerArr[myPoint-1]);
});

答案 3 :(得分:-2)

您正在使用onClick='goto(" + i + ");'。请改用onclick ='goto("+i+")',不要使用分号