2012-12-17 37 views
2

这似乎工作75%的时间和模态函数执行的参数可用,但表中的每一个按钮,我会得到一个未捕获的SyntaxError:意外的标识符。这是否与不正确的关闭有关?我的谷歌搜索作为一个潜在的问题落在了那里,但我无法在这里实施任何解决方案到我目前的方法。Javascript中的意外标识符for循环

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

你从哪里获得“问题”,它看起来如何? –

+0

“questionTitle”,“answer1title”或“answer2title”中是否有任何单引号或双引号? – Ian

+0

我认为一些或多个标签没有关闭,因此语法错误。 –

回答

1

的问题是,任何的questionTitleanswer1title,或answer2title可能在它们的值中有一个单引号,这会打断您尝试的字符串连接。您需要将所有出现的单引号替换为单引号。因此,像这样:

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绑定事件,而不是内联。这是一个不同的主题,与您的问题无关,尽管它可能有助于避免它首先。

+0

我可以在整个阵列上运行这个函数,以便在我开始循环前消除这个问题吗? 我也想看看如何追加HTML的更好的例子。我绝对愿意学习更好的做法。 – user1909325

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. 
+0

请解释为什么,downvote? –

+0

我没有downvote,但我确实尝试过。它修复了错误,但是现在所有im传递的数据都加载了特殊字符(%20等) – user1909325

+0

这不是你认为它的转义。这个'escape'函数是用于转义URL的,对于转义单引号是非常不必要的,这是主要问题 – Ian