是否有另一种方法可以通过innerHTML按钮的onclick而不是绑定到窗口来调用局部函数?

时间:2019-07-26 08:00:48

标签: javascript html closures

通过js创建一个按钮并将其作为模式插入主体,该按钮的Matrix4f m; auto it = m.line_cbegin(); while(it != m.line_cend()) { ... some_operation(*it) //*it is expected to be a Vector4d object ... it++; } 处理程序是promise范围内的resolve函数。

当我不将解析度添加到窗口onclick时,window.resolveAlert = resolve将引发未找到的错误。

还有另一种方法可以避免将resolve函数绑定到onclick来调用作用域函数吗?

window

1 个答案:

答案 0 :(得分:4)

请改用Javascript正确地连接事件侦听器-使用addEventListener,然后可以将resolve变量传递给它:

function showRatingAlert() {
  return new Promise(resolve => {
    const content = `
      <div id="rating-alert">
        <button>
          Sure
        </button>
      </div>
    `;
    const tag = document.createElement('div');
    tag.innerHTML = content;
    // tag.querySelector('button').addEventListener('click', resolve);
    // you can ensure the listener only runs once by passing { once: true }, if you wish:
    tag.querySelector('button').addEventListener('click', resolve, { once: true });
    document.body.appendChild(tag);
  })
}

showRatingAlert()
  .then(() => console.log('resolved'));

几乎应该避免使用内联处理程序-它们需要全局污染才能发挥作用,并且不能从附加侦听器的封闭范围中受益(如您所见)。