【发布时间】:2018-02-02 20:28:35
【问题描述】:
我想在 JS 中编写一些函数,它们返回不同的 html 元素(例如按钮、输入、选择、文本区域),我想以多种形式使用它们。
我希望能够将一个函数传递给在用户与元素交互时在返回的 html 中调用的函数。
例如:一个按钮
// I'm using ES6 syntax
const button = (button_id, button_text, on_click) => {
return '<button id="' + button_id + '" type="button" onclick="' + on_click + '">' + button_text + '</button>'
}
button("im_the_button_id", "I'm a button", () => { console.log('clicked') })
// Looks like this in the browser:
// <button type="button" onclick="function () {
// console.log('clicked');
// }">I'm a button</button>
到目前为止一切顺利,当我检查按钮时,返回的 html 显示在我的表单中并且对我(菜鸟)来说看起来不错。
但如果我点击按钮,我会得到一个Uncaught SyntaxError: Unexpected token ( (index):1
在控制台中。
我担心将字符串与函数连接起来会很麻烦,所以我的问题是:
这甚至可能吗?
或者我是否必须将一个 id 传递给每个元素,并将带有getElementyById() 的 onClick 或 onChange 函数注入我想在我的表单中呈现的元素?
【问题讨论】:
-
您不能将函数连接到字符串。
-
创建一个合适的元素并改用
addEventListener -
你可能想看看像 reactjs 这样的框架。我想说你的问题是 XY 问题的一个很好的例子。虽然您不能将函数与字符串连接起来,但还有其他方法可以实现您的实际目标(在没有大量样板的情况下向元素添加事件侦听器)。
-
不允许在元素属性中定义函数。你只能在那里调用函数。
标签: javascript html