Javascript for循环中出现意外的标识符

时间:2012-12-17 07:58:33

标签: javascript loops buttonclick

这似乎可以在75%的时间内工作,并且模态函数可以使用可用的参数执行,但是表中的每个按钮我都会得到一个Uncaught SyntaxError:Unexpected identifier。这与inproper关闭有关吗?我的谷歌搜索作为一个潜在问题登陆,但我无法在此处实现任何解决方案。

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

2 个答案:

答案 0 :(得分: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绑定事件,而不是内联。这是一个不同的主题,与你的问题无关,虽然它可能首先帮助避免它。

答案 1 :(得分: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.