Javascript 从jquery中的字符串调用函数,但传递的参数不';不恰当地出现

Javascript 从jquery中的字符串调用函数,但传递的参数不';不恰当地出现,javascript,jquery,html,function,Javascript,Jquery,Html,Function,我在变量中创建一个HTML元素作为字符串,并在其单击时调用函数。问题是,当我试图将对象作为参数传递给函数时,它没有被正确发送。调用函数时,我只是安慰传递的对象,它正在记录[object object],因此它不能作为对象访问。我做错了什么 fnCreateElement: function(obj) { let mainObj = obj console.log('JSON received ----', obj) let el = '<s

我在变量中创建一个HTML元素作为字符串,并在其单击时调用函数。问题是,当我试图将对象作为参数传递给函数时,它没有被正确发送。调用函数时,我只是安慰传递的对象,它正在记录[object object],因此它不能作为对象访问。我做错了什么

fnCreateElement: function(obj) {
        let mainObj = obj

        console.log('JSON received ----', obj)
        let el = '<span class="field-actions d-block">' +
            '<i  id="edit" class="fa fa-pencil pr-3 pointer" onclick="openModal(\'' + obj + '\')" aria-hidden="true"></i>' +
            '<i class="fa fa-times pointer" aria-hidden="true" onclick="removeElement(\'' + obj.id + '\')"></i>' +
            '</span>';

这是预期的行为。如果您想在控制台中将对象显示为字符串,那么可以使用。

您可以在连接对象之前将其解析为JSON,但由于两个原因,这会产生比它解决的问题更多的问题。首先,您必须通过转义来解决结果JSON中不匹配的引号,其次,您需要在调用的函数中再次解析JSON

更好的方法是将对象应用于公共父元素上的
数据
属性,然后通过委托事件处理程序将其读回

还要注意,您正在动态创建的HTML中创建
id
属性。如果函数被多次调用,这可能导致重复。要避免这种情况,请在元素上使用
class
属性

说了这么多,试试这个:

让obj={
id:'abc123',
福:“酒吧”
}
//在创建元素的逻辑中:
设$newContent=$(“”)+
“编辑”+
“Delete”).appendTo(“#container”);
$newContent.filter('.field actions').data('obj',obj);
//逻辑中其他位置的委托事件处理程序:
$(“#容器”)。在('单击','编辑',函数()上{
console.log($(this).closest('.fieldactions').data('obj');
}).on('click','remove',函数(){
console.log($(this).closest('.field actions').data('obj').id);
});

问题在于,通过引用JSON对象,将其作为字符串传递给
OpenModel
函数。删除引号就可以了

onclick="openModal(' + obj + ')"

您是否尝试将JSON.stringify()对象打印为JSON?在控制台中,对象被打印为JSON,而不仅仅是字符串。请注意,由于生成的JSON中的引号不匹配,这将不起作用。您需要手动转义它们。我一开始确实这样做了,但它在index.html:1处返回了一个错误
Uncaught SyntaxError:Unexpected identifier
。当我打开错误时,它显示一个空白index.html文件,只有一行->builder.openModal([object object])啊,是的,除非单击时
obj
可用,否则它将无法工作-我会考虑一下
onclick="openModal(' + obj + ')"