0

クリックイベントを持つボタン要素を作成する次の Javascript コードがあります。

function Button(id, url, blockMsg){

var id = id;
var url = url;
var blockMsg = blockMsg;
var message;

this.getId = function(){
    return id;
};

this.getMessage = function(){
    return message;
};

block = function(msg){
    $.blockUI({
        message: msg
    });
};

unblock = function(){
    $.unblockUI();
};

showErrors = function(){
    console.log('errors');
}

$(id).bind('click', function(){
    $.ajax({
        url: url,
        type: 'POST',
        beforeSend: function(){
            block(blockMsg);
        },
        error: function(response){
            message = $.parseJSON(response);
            message.action();
            unblock();
            console.log(action);
        },
        success: function(response){
            message = $.parseJSON(response);
            [message.action]();
            unblock();
            console.log(action);
        }
    });
});
};

$(document).ready(function(){
var buttonRegister = new Button('#btnCompanyRegister', '/company/register/', 'register ...');
});

ボタンをクリックすると、すべて正常に動作し、PHP スクリプトが返されます

json_encode(array('action' => 'showErrors'));

FireBug でエラーが表示されます: ["showErrors"] is not a function

私は何を間違っていますか?関数が指定されていないのはなぜですか? スコープに問題がありますか?

ご協力ありがとうございました。

4

2 に答える 2

5

[message.action]();使用する代わりにwindow[message.action]();

message.action関数ではない文字列「showErrors」です。showErrorswindow オブジェクトからグローバル関数を取得できます。

于 2013-01-24T11:36:13.717 に答える
0

;関数宣言の後に抜けがあります。

showErrors = function(){
    console.log('errors');
};
于 2013-01-24T11:35:18.450 に答える