1

私は次のようなものを持っています

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

私はそれを次のように実行しようとしています

buttonObject.onmouseover = function( ) { ウィンドウ [ this.someObject._ _onmouseover ] () ; };

そして、それがどのように可能かわかりません。

私のシナリオをお話ししましょう。このプラグインを作成して、jquery ダイアログ ボックスで 4 種類のダイアログ メッセージを生成します。「警告」、「エラー」、「注意」、「確認」です。したがって、dom に 4 つのスパンがあり、これら 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 に答える