我有一个在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中调用它有关?
答案 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+")'
,不要使用分号