1

我有类似的东西

" _onmouseover " : "this.className=this.className.replace('hover', '')";

我正在尝试执行它

buttonObject.onmouseover = function() { window [ this.someObject._ _onmouseover ] () ; };

而且我不知道这怎么可能。

让我告诉你们我的情景。我正在创建这个插件来在 jquery 对话框中生成四种类型的对话消息。那些是“警告”、“错误”、“注意”和“确认”。因此,假设 dom 中有 4 个跨度应该触发这四个。

<span id='DialogueWarning'> Warning </span> 
<span id='DialogueError'> Error </span> 
<span id='DialogueNote'> Note </span> 
<span id='DialogueConfirm'> Confirm </span>

现在让我们点击一​​下来显示对话

jQuery('#DialogueWarning').click(function(){

        var dialogue = new Dialogue({
            "type":"Warning",
            "message":"Are you sure you want to close this window without saving your changes?",
            "buttons":
            [
                {   
                    "text":"Close without saving", 
                    "_onmouseover": "this.className+=' hover'",
                    "_onmouseout":"this.className=this.className.replace(' hover', '')",
                    "bClass":"e_customButton"
                },

                {   
                    "text":"Don't Close",
                    "_onmouseover": "this.className+=' hover'",
                    "_onmouseout":"this.className=this.className.replace(' hover', '')",
                    "bClass":"e_customButton"
                }
            ],
            "closeOnBackgroundClick" : true
        });
    });

请参阅“_onmouseover”和 _onmouseout 的东西,我需要这些。有什么办法可以让我通过另一种方式

4

3 回答 3

1

如果您需要eval. 我敢打赌您的应用程序设计中存在一些问题。
例如,您可以避免这样的事情:

// ...
var eventHandlers = {
    "_onmouseover" : "this.className=this.className.replace(' hover', '')"
};

// ...

eval(eventHandlers._onmouseover);

就像这样做

var eventHandlers = {
    _onmouseover: function(e) {
        this.className=this.className.replace(' hover', '');
    }
};

buttonObject.onmouseover = eventHandlers._onmouseover;

一些要阅读的文章:

#1
#2
#3

于 2012-09-20T16:56:33.423 回答
0

您可以使用Function. 演示

buttonObject.onmouseover = Function(window [ this.someObject.__onmouseover ] );
于 2012-09-20T16:58:21.693 回答
0

为什么它首先必须是一个字符串?

如果你有类似的东西:

var someObject = {
   _onmouseover: function() {
      this.className = this.className.replace(' hover', '');
   }
}

你可以像这样执行它:

buttonObject.onmouseover = someObject.__onmouseover;

如果您需要this成为按钮对象,您可以执行以下操作:

buttonObject.onmouseover = function() {
   someObject.__onmouseover.call( buttonObject );
};
于 2012-09-20T16:58:58.783 回答