如何调用名称为模板中属性值的函数?

时间:2011-06-08 13:30:02

标签: jquery

我有一个具有很多属性的表单。

其中一个是回调,其中包含我想要调用的回调函数。

<form  id="placeOrder" method="post" class="ajax" popupclass="order-created"  callback="orderCreated" action="url" >

和JS部分是:

    function popupHandler(sender){
    var popupclass  = $(sender).attr('popupclass');
    var callback    = $(sender).attr('callback');

    if ((typeof popupclass== "undefined") )
    {
        $("#pageContent").clickPopup('saved');
    }
    else
    {
        if ((typeof callback!= "undefined") )
        {
            //TODO: call the function , function name is in callback attr

        }
        $("#pageContent").clickPopup(popupclass);
    }
    } 

function orderCreated(){
    $('#basketquantity').html('0');
    $('#placeOrderButton').disableButton();
}

我已经检查了这个page,但函数的名称是在那里预定义的,因此不适合我。

2 个答案:

答案 0 :(得分:4)

假设该函数是全局函数,则它在window内。所以你可以这样称呼它:

window[callBackAsString]();

答案 1 :(得分:3)

如果attr中的字符串表示全局范围函数的名称,则可以通过window[callback]();

调用它

虽然我不会像你想的那样使用定制的attrs,但如果我按照你的建议去做它会是这样的:

var orderCreated = function()
    {
      $( '#basketquantity' ).html( '0' );
      $( '#placeOrderButton' ).disableButton();
    },
    popupHandler = function( sender )
    {
      var $sender = $( sender ),
          $pageContent = $( '#pageContent' ),
          popupclass = $sender.attr( 'popupclass' ),
          callback = $sender.attr( 'callback' );

      if( typeof popupclass === 'undefined' )
      {
        $pageContent.clickPopup( 'saved' );
      }
      else
      {
        if( typeof callback !== 'undefined' && typeof window[callback] === 'function' )
        {
          window[callback]();
        }

        $pageContent.clickPopup( popupclass );
      }
    };