我有一个字符串,如果将其转换为OBJ,它将正常工作。
var obj = JSON.parse('{ "placeholder": "Hello...."} ');
然后我以这种方式$('textarea').tagEditor(obj);
但是我还需要以这种方式评估内部是否有一个函数并且它可以工作。
var obj = JSON.parse('{ "placeholder": "Hello....", "onChange":"function(a,b,c)}{ }"} ');
我把它……。$('textarea').tagEditor(obj);
但是当我这样做的时候我得到了错误 未捕获的SyntaxError:JSON中位置38处的字符串意外
实际上,我想评估字符串形式的函数, 如您所见,当我将事件“ onchange”和函数放入对象时,必须对其进行评估才能使插件正常工作 有谁知道如何解决这个问题?
答案 0 :(得分:1)
您应该首先声明该函数,然后在该函数上调用toString
(它将自动转义'
,这是当前语法中的问题):
function x(a, b, c){
return '';
}
const stringified = JSON.stringify({
placeholder: "Hello....",
onChange: x.toString()
});
具体来说,由于函数属性值的字符串定界符使用'
,因此需要转义内部使用的'
。 (转
"onChange":"function(a,b,c)}{ return ''; }"
进入
"onChange":"function(a,b,c)}{ return \'\'; }"
)
但是我不建议手动执行此操作,这会非常乏味且容易出错-toString()
方法可能是更好的选择。
答案 1 :(得分:1)
语法无效:
var obj = JSON.parse('{ "placeholder": "Hello....", "onChange":"function(a,b,c)}{ return ''; }"} ');
您的JSON被正确地引用了,但是您抢占了函数声明中的单引号。因此,将其更改为转义引号:
编辑:要评估该功能,您必须像这样使用eval()
。我不知道您对onChange处理程序的意图是什么,所以我对其进行了修改,使其可以正常工作:
var obj = JSON.parse('{ "placeholder": "Hello....", "onChange":"function handler(e){ console.log(e.target.value); }"} ');
console.log(obj);
eval(obj.onChange);
document.querySelector('input').onchange = handler;
<input>
<div></div>