0

だから私はこのボタンを持っています。これはJavaスクリプトで動的に追加されますが、ファイル名をパラメーターとして関数に送信したいのですが、ファイルとして保存されたvarに名前が既にあり、名前は一般的に次のようなものですp164.epub。しかし、何らかの理由でパラメーターを受け入れません。たとえば、ファイルの代わりに番号を追加すると、それが受け入れられ、正常に動作します

$('#result2').append("<button class ='removeBtn' onclick ='removeEbook("+file+")'>Remove</button>");

私の機能

function removeEbook(n)
{
  alert("yay");
}

何かご意見は?

4

3 に答える 3

3

あなたはjQueryを持っています - インラインイベントハンドラーを使用しないでください:

var file = '...';

$('<button class="removeBtn">').text('Remove').on('click', function() {
    // NB: "this" refers to the clicked button
    removeEbook(file);
}).appendTo('$#result2');

どうしてもインライン イベント ハンドラーを使用する場合 (実際に使用すべきではありません)、ベスト プラクティスは、JS 文字列に一重引用符を使用し、HTML 内の属性に二重引用符を使用することです。次に例を示します。

$('#result2').append('<button class="removeBtn" onclick="removeEbook(\''+file+'\')">Remove</button>');

file書かれているように、これは、トリガーされたときの値ではなく、ハンドラーが登録された時点の値にハンドラーをバインドすることに注意してください(上記のコードは文字列定数に変換するため)。

file引用符文字が含まれている場合 (一部のシステムでは完全に合法です)、不正な文字列定数になってしまうことに注意してください。

上記は、インライン イベント ハンドラーを使用すべきではない多くの理由のうちの 2 つにすぎません。それらはエラーが発生しやすいです(あなたが見つけたように)。

于 2013-05-22T15:36:51.690 に答える
1

文字列パラメーターの前後にエスケープされた引用符を追加する必要があります。

$('#result2').append("<button class ='removeBtn' onclick ='removeEbook(\'"+file+"\')'>Remove</button>");
于 2013-05-22T15:38:03.660 に答える