2

如果我在 HTML 中定义 JavaScript 代码片段,如下所示:

<div id=myElem onMyUpdate="alert('Update called for ' + this.id)">...

那么在this正确分配的 JavaScript 中评估它的最优雅的方法是什么?

到目前为止,我想出的是这样的:

if (elem.hasAttribute('onMyUpdate'))
    (function () { eval(elem.getAttribute('onMyUpdate')) }).call(elem);

这看起来很糟糕(对我来说),但有效。有更好/更优雅的选择吗?

MDN 说 eval() 曾经有第二个参数来做到这一点,但现在已被弃用;然后 MDN 建议改用运算符 with() ,如果您按照提供的链接进行操作,那么最新标准将不推荐使用该运算符。换句话说,死胡同。

(作为旁注,StackOverflow 会忽略this搜索词中的单词,因此它可能会错过相关答案 - 有没有办法告诉它不要?)

编辑:我忘了提:请不要使用 jQuery,只需使用香草 JavaScript

4

4 回答 4

2

这个怎么样:

if(elem.hasAttribute('onMyUpdate')) {
  var fun = new Function(elem.getAttribute('onMyUpdate'));
  fun.call(elem);
}
于 2012-09-30T20:53:28.577 回答
1

理想情况下,您应该完全不引人注意地执行此操作,并且不使用eval

<div id="myElem"></div>

.

var elem = document.getElementById('myElem');
elem.onMyUpdate = function () {
    alert(this.id);
};

// ...

elem.onMyUpdate && elem.onMyUpdate();
于 2012-09-30T20:54:12.697 回答
0

您可以使用 elem 而不是使用它。

 <div id=myElem onMyUpdate="alert('Update called for ' + elem.id)">...

js:

if (elem.hasAttribute('onMyUpdate')){ // all variable available here will be available inside eval.
     eval( elem.getAttribute('onMyUpdate') );
}
于 2012-09-30T21:00:17.290 回答
0

更优雅的解决方案是使用自定义事件,将处理程序绑定到 HTML 元素上的一些自定义事件,并在代码的其他部分触发它们。有关一些示例,请参阅本教程Sidharth Mudgal 的答案。

于 2012-09-30T20:53:52.187 回答