2016-07-12 39 views
0

當我試圖在下面的函數中傳遞一個字符串作爲參數時,我得到了Uncaught SyntaxError: missing) after argument list錯誤。它在傳遞整數時工作正常。我很困惑,因爲我讀了一個字符串必須作爲參數傳遞,而不是一個整數。JavaScript:Uncaught SyntaxError:missing)在參數列表後

HTML:

r.title = "The large item" 
counter = <integer> 

<% @items.each do |r| %> 
    <p>Title: <%= r.title %></p> 
    <p>Price: <%= r.price %></p> 
    <p>Description: <%= r.description %></p> 
    <p style="color:blue;" class="room_<%= counter %>" onclick='addItemToCart(<%= r.title %>, <%= counter %>)'>Select Item</p> 
    <br> 
    <br> 
<% end %> 

當我代替r.title通過r.id,代碼工作。

的JavaScript:

<script text/javascript> 
    function addItemToCart(title, item_number){ 
    $("#" + item_number).append("<br>"+title); 
    } 
</script> 

回答

1

我想你錯過了串引號包圍。試試這個:

<p style="color:blue;" class="room_<%= counter %>" 
    onclick='addItemToCart("<%= r.title %>", <%= counter %>)'>Select Item</p> 

編輯

要了解這個問題,嘗試尋找它輸出HTML。我想你會看到這樣的事情:

<p style="color:blue;" class="room_123" 
    onclick='addItemToCart(The large item, 123)'>Select Item</p> 

希望,失蹤的報價都明顯不同於輸出。

+0

太棒了,謝謝。你知道爲什麼'<%= r.title.to_s%>'不起作用嗎? – Ctpelnar1988

+1

出於同樣的原因......你需要在字符串周圍加引號。 – smarx

+0

如果'r.title'包含雙引號會發生什麼? –

0

我同意@smarx,但我認爲這是一個將HTML,Javascript和Ruby代碼片段混合在一起的典型示例,應該始終避免這種情況。

更好的方法是至少從JavaScript中分離出Ruby代碼片段。

ERB

<p style="color:blue;" class="room_<%= counter %>" 
    data-title="<%= r.title %>" 
    data-counter="<%= counter %>" 
    onclick='addItemToCart(this)'>Select Item</p> 

的Javascript

function addItemToCart(element) { 
    var title = element.dataset.title; 
    var counter = element.dataset.counter; 
    // ... 
} 

你可以看到,我添加了兩個data-*屬性的HTML和Javascript代碼閱讀。這看起來有點冗長,但意大利麪不是很好,它清楚地將在服務器(Ruby)上運行的代碼與在瀏覽器上運行的代碼(Javascript)分開。

P.S.如果你使用jQuery,我強烈建議不要使用onclick屬性,因爲它需要你定義全局函數。改爲使用$(...).click(fn)$(...).on('click', fn),因爲它允許匿名非全局函數。

相關問題