表单事件'actioncomplete'没有触发

时间:2013-11-19 05:25:12

标签: javascript forms events extjs extjs3

我在3个事件上签署了表格,但事件'actioncomplete'没有被解雇。执行其他两个事件,执行成功回调。

if(obj instanceof Ext.form.BasicForm){
    var before='beforeaction';
    var complete='actioncomplete';
    var error='actionfailed';
}
obj.addListener( before, 
        function(o,e) {
                    this.changeSysState(lang[msg_id].loading,'loading','load_N_'+this.load_id);
                    }, this);
obj.addListener( complete, 
        function(o,e) {
                    this.showStatus(lang[msg_id].complete,'complete','load_N_'+this.load_id);
obj.addListener( error, 
        function(o,e) {
                    this.changeSysState(lang[msg_id].error,'error','load_N_'+this.load_id);
                    }, this);

我的表格

var changePanel = new Ext.form.FormPanel({
        labelWidth     : 132,
        layout         : 'form',
        border         : false,
        defaults:{allowBlank:false,width:165},
        url            : '/xstore/xstore_change_pass.php',
        items : [ /*some fields*/ ]
});

提交电话

var form = changePanel.getForm();
form.submit({
              success: function(r,o) {
                  winPass.destroy();
              }
           });

服务器返回

{"success":true}

使用ExtJs 3.4

1 个答案:

答案 0 :(得分:2)

通过该响应,应该触发actioncomplete。你应该搜索它为什么不是的原因。我看到您的代码可能会导致此行为的一些问题:

  • 您将beforecompleteerror声明为局部变量,并将它们用于范围之外;这可能是一个问题;请改用:

    if(obj instanceof Ext.form.BasicForm){
        var before='beforeaction';
        var complete='actioncomplete';
        var error='actionfailed';
    
        obj.addListener( before, function(o,e) {
            this.changeSysState(lang[msg_id].loading,'loading','load_N_'+this.load_id);
        }, this);
        obj.addListener( complete, function(o,e) {
            this.showStatus(lang[msg_id].complete,'complete','load_N_'+this.load_id);
        }, this);
        obj.addListener( error, function(o,e) {
            this.changeSysState(lang[msg_id].error,'error','load_N_'+this.load_id);
        }, this);
    }
    
  • 你在success回调中摧毁了一些东西;此success回调在actioncomplete之前触发,因此如果它也会破坏表单,则可能是另一个问题

如果这些都没有帮助,请检查开发人员工具以获取服务器响应。可能会返回一些错误代码也可能是原因。

Here is fiddle您可以在其中看到第二个问题(actioncomplete在销毁表单后未触发)。