2014-02-07 33 views
1

一種很難解釋,我使用的。經過()jQuery函數放置在HTML一個div容器,然後在標籤中的一個有一個onclick屬性調用一個函數,它傳遞一個字符串(javascript變量),但是這個變量需要用引號括起來讓javascript函數起作用:逃生的功能後jQuery的報價,用繩子

請注意,after函數似乎用html的雙引號替換單引號的屬性?

$("#outputsContainer tr:last").after(
    "<tr>\ 
     <td>"+value.name+"</td>\ 
     <td>"+value.status+"</td>\ 
     <td>\ 
      <a href='" + value.delete + "' onclick='" + myfunction(value.status) + "'>Delete</a>\ 
      <a href='" + value.download + "'>Download</a>\ 
     </td>\ 
    </tr>"); 

我已經成功地得到函數內的變量值,但似乎不能放置引號很容易

輸出:

<a href="/item/4/download" onclick="myfunction(complete)">Download</a> 

後,我什麼(請注意報價全圍):

<a href="/item/4/download" onclick="myfunction('complete')">Download</a> 

幫助表示感謝,謝謝!

+1

'...的onclick =」 myfunction的( 「+ JSON.stringify(value.status)+」);」 ...',但是認真你不應該使用內聯事件處理程序。使用DOM而不是構建HTML字符串。我擔心你在代碼中也有一些XSS問題。 – Bergi

+0

是啊,我在想XSS ....注意到!謝謝 – iswinky

回答

1

嘗試逃脫他們這樣onclick=\"" + "myfunction('"+value.status+"')" +

$("#outputsContainer tr:last").after(
    "<tr>\ 
     <td>"+value.name+"</td>\ 
     <td>"+value.status+"</td>\ 
     <td>\ 
      <a href='" + value.delete + "' onclick=\"" + "myfunction('"+value.status+"')" + "\">Delete</a>\ 
      <a href='" + value.download + "'>Download</a>\ 
     </td>\ 
    </tr>"); 

DEMO

+0

我得到這個返回:'onclick =「myfunction(」generate_complete')'>刪除'。也許是Symfony的或嫩枝這樣.. – iswinky

+0

@ user2071225我已經更新我犯了一個錯誤。 – Anton

+1

謝謝,這個效果很好。我一直在貨架我的大腦年齡試圖逃跑正確的報價! – iswinky

2

試圖串聯的JavaScript字符串轉換成HTML中的JavaScript字符串就是要給你串的大球,這是真的很難維護。

問題分解下來。使用現有的DOM功能來幫助您。

var row = jQuery('<tr>'); 

var name_cell = jQuery('<td>'); 
name_cell.text(value.name); 
row.append(name_cell); 

var status_cell = jQuery('<td>'); 
name_cell.text(value.status); 
row.append(status_cell); 

var links_cell = jQuery('<td>'); 

var delete_link = jQuery('<a>'); 
delete_link.attr('href', value.delete); 
delete_link.on('click', function() { 
    myfunction(value.status); 
}); 
delete_link.text('Delete'); 
links_cell.append(delete_link); 

var download_link = jQuery('<a>'); 
download_link.attr('href', value.download); 
download_link.text('Download'); 
links_cell.append(download_link); 

$("#outputsContainer tr:last").after(row); 
0

+1什麼@Quentin說和做,而不是正常的構建HTML字符串,但代碼可以用jQuery的鏈接來構造更簡單和attributes constructor

var row = $('<tr>').append(
    $('<td>', {text: value.name}), 
    $('<td>', {text: value.status}), 
    $('<td>').append(
     $('<a>', {text: 'Delete', href: value.delete}).click(function() { 
      myfunction(value.status); 
     }), 
     $('<a>', {text: 'Download', href: value.download}) 
    ) 
); 
$("#outputsContainer tr:last").after(row);