通过带引号的Javascript字符串传递变量

通过带引号的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

我有一个函数,它返回一个包含javascript调用的字符串。因为它是引用的,所以我不能通过它传递变量

如何更改允许传递javascript对象值的返回字符串

示例:如何通过return语句传递var I

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到底有什么问题,但请看更新的答案。