2

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

 function printResult(name, i) {

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

a href 标记按照应有的方式附加,但是当我调用 goto 函数时,萤火虫说:'goto is not defined'

但它是!!

这是功能:

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标签中被调用有关吗?

4

4 回答 4

1

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

在 Javascript 中,它不是关键字。但是,它 一个保留字,因为它可能会在该语言的未来版本中使用。仅此一项就可能导致 JS 拒绝您的函数或无法调用它。

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

因此,我的建议是更改函数名称。运气好的话,它可能会神奇地开始工作。

于 2013-01-21T10:56:43.327 回答
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()为更具描述性的函数。这不应该与您当前的代码具有相同的范围问题。

于 2013-01-21T10:57:11.020 回答
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]);
});
于 2013-01-21T11:12:44.930 回答
-2

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

于 2013-01-21T10:30:12.533 回答