2012-01-10 92 views
1

我有一個函數,它返回一個包含javascript調用的字符串。既然它被引用,我不能通過它傳遞變量。通過引用Javascript字符串傳遞變量

如何更改返回字符串,使我能夠傳遞JavaScript對象值。

例如:如何通過var i通過return語句。

var i = 'iaa'; 

return '<a href="javascript:abccd(\'i\');" ><img src="../images/btnsave2.png" style="margin:6px 0 0 6px;" height="13" width="13" /></a> ';

+7

Eugh。重構。使用標準的DOM,而不是傳遞大量的HTML。然後你可以使用標準的事件處理器綁定技術。 – Quentin 2012-01-10 14:02:01

+0

爲什麼圖像中缺少'alt'屬性? – Quentin 2012-01-10 14:12:28

+0

@Quentin: - 我在JQGrid的一個自定義格式化程序中使用這個。我不認爲我可以在 – Nipuna 2012-01-10 16:05:08

回答

2

如果您需要操作原始HTML,至少要在JavaScript中分別添加事件處理程序。和CSS文件中的樣式。

您的圖片標記代碼應包含data-屬性:

i = i.replace(/"/g, '\\"') 
return '<img data-input="' + i + '" src="../images/btnsave2.png" />' 

然後添加一個監聽器是如此簡單:

var onClick = function (e) { 
    var data = e.target.getAttribute('data-input') 
    if (data) { 
     abccd(data) 
    } 
} 

/* Firefox, Chrome &c */ 
if (document.addEventListener) { 
    document.addEventListener('click', onClick, false) 
/* IE <9 */ 
} else if (document.attachEvent) { 
    document.attachEvent('onclick', function() { 
     return onClick({ target: event.srcElement }) 
    }) 
} 

當然,XSS問題,通過@Quentin提到的,是仍然是一個問題。但至少你不會像原始示例那樣在內聯處理函數中轉義嵌套引號。

+0

document.body.addEventListener在IE中不起作用。我也嘗試使用這個http://stackoverflow.com/questions/1695376/msie-and-addeventlistener-problem-in-javascript,但它只有當我有e.target.getAttribute('數據輸入') – Nipuna 2012-01-11 05:01:25

+0

@Nipuna席爾瓦,我不確定你的問題與'attachEvent'是什麼,但看到更新的答案。 – katspaugh 2012-01-11 14:14:31

2

試試這個,但請付諸實踐之前重新考慮你的行動。

var i = "halo"; 
return '<a href="javascript:abccd(\''+i+'\');" ><img src="../images/btnsave2.png" style="margin:6px 0 0 6px;" height="13" width="13" /></a> '; 
+0

左右通過標準DOM有什麼不好的做法? – Nipuna 2012-01-10 16:07:02

+0

如果'i'包含雙引號,反斜線,新行(可能還有其他字符),則會中斷。 – Quentin 2012-01-10 16:09:17

+1

這樣做的第一個不好的實驗就像Quentin所說的通過變量中的特殊字符。第二件事是你可以做一些更可靠的可重複使用的可持續代碼,而不僅僅是「它可以工作,所以沒關係」的代碼。以更合適的方式完成你想要的東西的方法之一就是解決方案。 – khael 2012-01-10 16:54:47