2012-12-17 82 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