1

これがばかげた質問であるか、意味をなさない場合は、すみません。

mySQL データベースから動的に作成する li リストがあります。このコードは次のようになります。

var resultCount = 0;
var mxKey = $.now();

$.get("\\php\\phpGenre.php?mxKey"+mxKey, function(genreData){

    jsonResults = JSON.parse(genreData);

    while (resultCount<jsonResults.length){
        var genreName = jsonResults[resultCount]['genre_name'];
            $('#genreList').append('<li><a href="#" onclick="searchGenres(' + genreName + ');return false"><span>' + genreName + '</span></a></li>');
                resultCount++;
    }

});

リストを作成するとき、関数を呼び出す onClick イベントも追加できる必要があります...この関数はリスト名を値として使用し、変数のgenreNameを介して生成されます。私のリストは正常に作成されますが、onClick イベントは機能せず、戻り続けます:

SCRIPT5009: 'Documentary' is undefined

または別の例は次のようになります。

SCRIPT5009: 'Fantasy' is undefined 

「ドキュメンタリー」と「ファンタジー」はジャンル名です。

私の質問は、genreName を値として使用する各リスト項目に onClick イベントを含めるにはどうすればよいですか?

リストをハードコーディングすると、正常に機能します。

<ul><li><a href="#" onclick="searchGenres('action');return false"><span>Still To Do...</span></a></li></ul>

ありがとう....コーディングの知識が乏しいため、もう一度申し訳ありません。

4

3 に答える 3

3

'文字列として送信したいので、ジャンル名をエスケープする必要があります。これを試して

$('#genreList').append('<li><a href="#" onclick="searchGenres(\'' + genreName + '\');return false"><span>' + genreName + '</span></a></li>');
于 2013-01-04T12:12:33.097 に答える
1

これを試して:

$('#genreList').append('<li><a href="#" onclick="searchGenres(\'' + genreName + '\');return false"><span>' + genreName + '</span></a></li>');

これにより、出力が生成されます。

<li><a href="#" onclick="searchGenres('action');return false"><span>action</span></a></li> 

あなたのコードは以下を生成します:

<li><a href="#" onclick="searchGenres(action);return false"><span>action</span></a></li>
于 2013-01-04T12:14:47.560 に答える
0

あなたのhtmlは次のように作成されています

searchGenres(ファンタジー) または searchGenres(ドキュメンタリー)

等々。必要なのは、これらのパラメーターを文字列として送信することです。コードを次のように変更できます

... searchGenres(\'' + ジャンル名 + '\') ....

' の 1 つの前のエスケープに注意してください。これにより生成されます

searchGenres('Fantasy') または searchGenres('Documentary') など

IMO、より良いオプションは、jQuery 関数を使用して、html を作成した後にフィールドにイベントを追加することです。http://api.jquery.com/delegate/を参照してください。

于 2013-01-04T12:16:13.737 に答える