2

このようなページに要素がある場合...

<span data-function="DoSomething">Click</span>

...そして私はこれを私のページヘッダーに入れました...

$(document).ready(function() 
{ 
   $('[data-function]').each(function()
   {
       var fName = $(this).attr('data-function');
       $(this).click(fName);
   });
});

... コメントの代わりに入れるものは、「DoSomething」と呼ばれる関数を実行するという望ましい効果を生み出します。

注: 上記のコードは機能しません。私の質問は、これを機能させる方法です (「DoSomething」を DoSomething(); に変換します)。

アイデアはありますか?

4

4 に答える 4

3

機能が利用可能である必要があります。次のように、それらをオブジェクトに入れてみてください。

$(document).ready(function() 
{ 
   var fns = {
      DoSomething: function() {/* ... */},
      DoAnotherthing: function() {/* ... */}
   };
   $('[data-function]').each(function()
   {
       var fName = $(this).attr('data-function');
       $(this).click(fns[fName]);
   });
});

これは jsfiddleで、すべてを 1 つの名前空間にローカルに保持しdata、要素の属性に基づいてハンドラーを割り当てる方法を示しています。

于 2012-08-21T11:31:53.180 に答える
2

ウィンドウオブジェクトで関数を呼び出してみてください -

$(document).ready(function()  {
        $('[data-function]').each(function() {
            var fName = $(this).attr('data-function');

            if (typeof (window[fName]) === "function") {
                $(this).click(window[fName]); 
            }
        });  
}
于 2012-08-21T11:36:01.833 に答える
1

次のようなものを使用できます

$(this).click(window[fName]);

関数がグローバル スコープで定義されていない場合、 Wherewindowは適切な式に置き換えられます。DoSomething

于 2012-08-21T11:31:34.343 に答える
0

多分少しきれいな方法:

http://jsfiddle.net/whsPG/

var myfuncs = {
  alert : function() {
        alert("An Alert");
    },
    changeName: function(obj) {
        $(obj).text('Other Text');
    }    
};

$('[data-function]').on('click', function()
{
  value =  $(this).data('function');

   if (myfuncs.hasOwnProperty(value)) {
     myfuncs[value](this);
   }

}); </p>

于 2012-08-21T13:04:14.703 に答える