这个问题已被解决
注意:您可以阅读解决方案和我进行的评估,感谢问题解释后的答案。
我正在尝试创建一个小的 JavaScript 脚本来解决用户的一些需求(UserLand 脚本)。
操作非常简单,为了尽可能简单,我需要在 DOM 中添加一些元素,包括 CSS、文本、函数等。
这样脚本就知道要创建什么元素、应用什么 CSS、什么文本等。我创建了一个具有以下形式的对象:
options: {
/* Button */
'button': {
'tagName' : 'button',
'innerHTML' : 'X',
'css' : {
'position' : 'fixed',
'z-index' : '9999999',
'bottom' : '20px',
'left' : '20px',
'background-color' : 'black',
'cursor' : 'pointer',
'color' : 'white',
'width' : '60px',
'height' : '60px',
'border' : 'none',
'border-radius' : '50%',
'font-weight' : 'bold',
'font-size' : '1.5rem'
},
'onClick' : 'objectName.method()'
}
}
我的脚本通过循环执行以下代码:
createElement: (element) => {
/* Create element */
const createElement = document.createElement( element.tagName );
/* Add innerHTML */
createElement.innerHTML = element.innerHTML;
/* Add CSS */
objectName.addCSStoElement( createElement, element.css );
/* Add onClick event*/
createElement.addEventListener( 'click', element.onClick, false );
/* Add to DOM */
document.body.appendChild ( createElement );
}
一切正常运行,除了指令:
createElement.addEventListener( 'click', element.onClick, false );
我想这是因为它是一个字符串,这就是 JS 将它附加到“onClick”事件的方式。
假设我没记错的话,我该如何添加函数的名称,以便在单击创建的元素时可以执行它?
我希望我已经很好地表达了自己,并且我糟糕的英语不会导致混乱。
感谢您的时间和帮助,向大家问好!
问候,亚历克斯
解决方案:
我意识到我在暴露我的问题时提供的信息并不完整,例如,我没有说明它是全局对象还是本地对象,非常抱歉。
它是一个本地对象,在这种情况下,它是可以信任的代码,因为它是我自己在每次进入网站时注入到浏览器中的代码,目的是在某些任务中支持我。
考虑到这一点,我们可以继续,如果无论如何这不是你的情况,请考虑同事在他们的答案中添加的信息,它们非常有趣和重要。
我必须进行的更改是: 首先,在“选项”中修改“onClick”的值,如下所示:
'onClick' : '(function(){objectName.method();})'
最后,我通过以下方式修改了将事件添加到 HTML 元素的方式:
createElement.addEventListener( 'click',eval(element.onClick), false );
而且,通过这些简单的更改,我设法解决并理解了问题所在!
非常感谢所有回复并给予我帮助和时间的人,祝你一切顺利!