2

forループで呼び出されるこの関数があります。

 function printResult(name, i) {

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

a href タグは必要に応じて追加されますが、goto 関数を呼び出すと、「goto が定義されていません」と firebug が表示されます。

しかし、そうです!!

これは機能です:

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]);
  }

関数が見つからない理由についてはわかりません。追加された a href-tag で呼び出されていることと関係がありますか?

4

4 に答える 4

1

goto()多くのプログラミング言語でキーワードとして一般的に使用されているため、関数のひどい名前です。

Javascript では、キーワードではありません。ただし、言語の将来のバージョンで使用される可能性があるため 予約語です。これだけでも、JS が関数を拒否したり、呼び出しに失敗したりする可能性があります。

ただし、予約されていない場合でも、潜在的なあいまいさと見なされる可能性があるため、使用はお勧めしません。

したがって、関数名を変更することをお勧めします。運が良ければ、魔法のように機能し始めるかもしれません。

于 2013-01-21T10:56:43.327 に答える
0

次のような jQuery クリック イベントを使用します。

HTML:

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

J:

$(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 に答える
0

onclick属性を使用してイベント ハンドラーを定義する場合、 の定義はgoto() globalである必要があります。つまり、window.goto存在する必要があります。

さらに重要なことに、これは jQuery のやり方ではありません。イベント ハンドラーは、HTML ではなく JavaScript コードで定義する必要があります。

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 に答える
-2

を使用してonClick='goto(" + i + ");'います。代わりに使用してくださいonclick ='goto("+i+")'。セミコロンは使用しないでください

于 2013-01-21T10:30:12.533 に答える