0

私はjqueryの追加機能をいじっています。私はかなりの量の html を追加しています。これは基本的に、onclick イベント関数を含む html ボタンです。

ややこしいですね?知っている。技術的な制限がいくつかあるため、これは 1 日か 2 日だけのオプションです。

とにかく、ここにいくつかの例があります:

これは機能しません:

$('body').append('<button onclick="(function(){console.log(' + '"Hello World"' + ');}())">BTN1</button>');

これは機能し、INT を投稿します。

$('body').append('<button onclick="(function(){console.log(' + "3" + ');}())">BTN2</button>');

問題は、引用符内の文字列の宣言にありonclickます。うまくいくはずだと思いますが、うまくいかないので、何か間違ったことをしています。問題は何ですか。

4

3 に答える 3

1

複数の言語を複数層深く入れ子にすることは、作成と保守にとって悪夢です。それを完全に避けるようにしてください。ボタンの DOM オブジェクトを作成し、JS イベント ハンドラーを個別にバインドします。

$('body').append(
    $("<button>BTN1</button>").on(
        'click', 
        function () {
            console.log("Hello World");
        }
    )
);
于 2013-09-16T09:22:04.150 に答える
1

onclick二重引用符は属性 ( ) の区切りに使用されるため、の属性値に二重引用符を使用することはできませんonclick="..."。代わりにバックスラッシュを使用して、次のように一重引用符をエスケープします。

$('body').append('<button onclick="(function(){console.log(\'Hello World\');}())">BTN1</button>');

または、文字列を連結する場合は、次のようにします。

$('body').append('<button onclick="(function(){console.log(' + '\'Hello World\'' + ');}())">BTN1</button>');
于 2013-09-16T09:08:07.857 に答える
0

二重引用符を保持できるように、属性に一重引用符を使用できます。バックスラッシュを使用して、JS 部分のインライン一重引用符を必ずエスケープしてください。

$('body').append('<button onclick=\'(function(){console.log(' + '"Hello World"' + ');}())\'>BTN1</button>');
于 2013-09-16T09:10:17.983 に答える