2

これは75%の時間で機能するようで、モーダル関数は使用可能なパラメーターで実行されますが、テーブル内のいくつかのボタンごとに、Uncaught SyntaxError:Unexpectedidentifierが発生します。これは不適切な閉鎖と関係がありますか?私のグーグル検索は潜在的な問題としてそれを見つけました、しかし私はここで私の現在の方法に解決策のどれも実装することができませんでした。

html += '<thead><th>Question</th><th>Answer 1</th><th>Answer 2</th><th>Answer 3</th><th>Answer 4</th></thead>';

        for (var i = 0; i < questions.length; i++) {

            question = questions[i].question;
            questionTitle = question.q;
            answer1title = question.a1;
            answer2title = question.a2;

            html += '<tr><td class="question"><b>'
             + question.q
             + '</b></td><td class="answer1">'
             + question.a1
             + '</td><td class="answer2">'
             + question.a2
             + '</td><td class="answer3">'
             + question.a3
             + '</td><td class="answer4">'
             + question.a4
             + '</td><td class="edit">'
             + '<button onclick="openQuestionModal(\''+questionTitle+'\', \''+answer1title+'\', \''+answer2title+'\')" class="btn btn-small btn-primary" id="questionEdit" type="button">Edit</button>'
             + '</td></tr>';   

        }

        $('#questionsTable').append(html); 
4

2 に答える 2

1

問題は、、、またはのいずれかのquestionTitleanswer1titleanswer2title一重引用符が含まれている可能性があることです。これにより、試行している文字列の連結が壊れます。一重引用符のすべての出現箇所をエスケープされた一重引用符に置き換える必要があります。だからこのようなもの:

http://jsfiddle.net/ZYnfc/2/

$(document).ready(function () {
    var par = "I'm the problem";
    var replacer = new RegExp("'", "g");
    var new_btn = $('<button onclick="clicker(\'' + par.replace(replacer, "\\'") + '\');">ASDF</button>');
    $("#main").append(new_btn);
});

function clicker(param) {
    alert(param);
}

私の例を実際のコードに適用する必要がありますが、重要なのは、関数呼び出しで連結している各変数のreplaceメソッドとreplacer正規表現を使用することです。

特にテーブルに関しては、HTMLを領域に追加するためのより良い方法があります。そして、インラインではなく、jQueryを使用してイベントをバインドすることをお勧めします。これは別のトピックであり、問​​題とは関係ありませんが、そもそもそれを回避するのに役立つ可能性があります。

于 2012-12-17T08:24:24.687 に答える
0

onclick属性に追加する前に、文字列をエスケープする必要があるかもしれません。

+ '<button onclick="openQuestionModal(\''+ escape(questionTitle)+'\', \''+ escape(answer1title)+'\', \''+escape(answer2title)+'\')" class="btn btn-small btn-primary" id="questionEdit" type="button">Edit</button>'

そして使用:

unescape('str_to_revert')// to get the data back inside your function.
于 2012-12-17T08:01:59.443 に答える