通过带引号的Javascript字符串传递变量
我有一个函数,它返回一个包含javascript调用的字符串。因为它是引用的,所以我不能通过它传递变量 如何更改允许传递javascript对象值的返回字符串 示例:如何通过return语句传递var I通过带引号的Javascript字符串传递变量,javascript,Javascript,我有一个函数,它返回一个包含javascript调用的字符串。因为它是引用的,所以我不能通过它传递变量 如何更改允许传递javascript对象值的返回字符串 示例:如何通过return语句传递var I var i = 'iaa'; 返回“” 试试这个,但在付诸实践之前请重新考虑你的行为 var i = "halo"; return '<a href="javascript:abccd(\''+i+'\');" ><img src="../images/btnsave2.p
var i = 'iaa';
返回“” 试试这个,但在付诸实践之前请重新考虑你的行为
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> ';
试试这个,但在付诸实践之前请重新考虑你的行为
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> ';
如果需要处理原始HTML,至少要在JavaScript中单独添加事件处理程序。和CSS文件中的样式 图像标记代码应包含数据属性:
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 })
})
}
当然,@Quentin提到的XSS问题仍然令人担忧。但至少您不必像原始示例中那样在内联处理程序中转义嵌套引号。如果需要处理原始HTML,至少可以在JavaScript中单独添加事件处理程序。和CSS文件中的样式 图像标记代码应包含数据属性:
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 })
})
}
当然,@Quentin提到的XSS问题仍然令人担忧。但至少您不必像最初的示例那样在内联处理程序中转义嵌套引号。Eugh。重构。使用标准DOM,而不是到处传递HTML块。然后可以使用标准的事件处理程序绑定技术。为什么该图像中缺少alt属性?@Quentin:-我在JQGrid中的自定义格式化程序中使用它。我认为无论如何我都无法通过标准的DOM考试。重构。使用标准DOM,而不是到处传递HTML块。然后可以使用标准的事件处理程序绑定技术。为什么该图像中缺少alt属性?@Quentin:-我在JQGrid中的自定义格式化程序中使用它。我认为无论如何我都无法通过标准DOM,这有什么不好的做法?如果我包含双引号、反斜杠、新行和可能的其他字符,这将被打破。第一次这样做的糟糕经验就像昆汀说的,传递的变量中的特殊字符。第二件事是,你可以做一些更可靠的、可重用的、可持续的代码,而不仅仅是一个可以正常工作的代码。以更合适的方式实现目标的方法之一是katspaugh解决方案。这有什么不好的做法吗?如果我包含双引号、反斜杠、新行以及其他一些字符,这将被打破。第一次这样做的不好经验就像Quentin说的传递变量中的特殊字符。第二件事是,你可以做一些更可靠的、可重用的、可持续的代码,而不仅仅是一个可以正常工作的代码。以更合适的方式实现您想要的功能的方法之一是katspaugh solution.document.body.addEventListener在IE中不起作用。我也尝试过使用它,但只有当我有e.target.getAttribute'data-input'@Nipuna Silva时它才起作用,我不确定您的attachEvent到底有什么问题,但是请看更新的答案。document.body.addEventListener在IE中不起作用。我也尝试过使用它,但只有当我有e.target.getAttribute'data-input'@Nipuna Silva时,它才起作用。我不确定您的attachEvent到底有什么问题,但请看更新的答案。