2011-11-14 29 views
8

Tôi muốn có trình xác thực từ xa cho trường văn bản. PHP của tôi trả về giá trị true/false. Tôi đã thử một cái gì đó như thế này:Extjs4 - xác thực từ xa

{ 
    xtype: 'textfield', 
    fieldLabel: 'Field', 
    allowBlank: false, 
    validator : function(value) { 
     Ext.Ajax.request({ 
     url: 'psc/validate', 
     params: { psc: value }, 
     success: function(response){ 
     return response.responseText        
     } 
     }); 
    }); 
} 

Vấn đề là yêu cầu ajax là đồng nhất và trình xác thực cho lỗi "không xác định giá trị". Có bất kỳ cuộc gọi lại nào không? Vì vậy, tôi sẽ trả về false theo mặc định và làm cho textfield hợp lệ khi cuộc gọi ajax sẽ kết thúc.

Tôi đã cố gắng để google xác thực từ xa extjs nhưng không có nhiều về nó.

Bất kỳ trợ giúp hoặc đề xuất nào? Cảm ơn.

Trả lời

11

có thể bạn không nên sử dụng trình xác thực sau đó, thêm người theo dõi thay đổi cho trường văn bản và sử dụng các phương thức markInvalid và clearInvalid để hiển thị xác thực.

{ 
    xtype: 'textfield', 
    fieldLabel: 'Field', 
    allowBlank: false, 
    textValid: false, 
    validator: function(){ 
     return this.textValid; 
    }, 
    listeners : { 
    'change': function(textfield,newValue,oldValue) { 
     Ext.Ajax.request({ 
      url: 'psc/validate', 
      params: { psc: value }, 
      scope: textfield, 
      success: function(response){ 
      if (response.responseText){ 
       this.clearInvalid(); 
       this.textValid = true; 
      } else { 
       this.markInvalid('field is not valid'); 
       this.textValid = false; 
      }        
      } 
     }); 
     }  
    } 
} 

tôi ẩn náu; t thử nó, nhưng có thể làm việc cho bạn aproach

EDIT tôi đã thực hiện một số sửa đổi mã để bao gồm các validator ..

+1

Cảm ơn bạn rất nhiều vì câu trả lời của bạn. Điều này chỉ hoạt động khi nhập vào trường văn bản. Trường văn bản luôn được đánh dấu là hợp lệ khi trường văn bản mất tiêu điểm. Tôi e rằng điều này cũng không giải quyết form.isValid() cho việc gửi biểu mẫu. – gotroch

+0

Tôi đã chỉnh sửa câu trả lời của mình – nscrob

+2

Cảm ơn nscrob! Bạn đã làm cho ngày của tôi! – gotroch

0

{ 
 
fieldLabel : 'Username', 
 
name : 'username', 
 
allowBlank : false, 
 
validFlag : true, 
 
validator : function() { 
 
    return this.validFlag; 
 
}, 
 
listeners : { 
 
    'change' : function(textfield, newValue, oldValue) { 
 
    var me = this; 
 
    Ext.Ajax.request({ 
 
    url : 'rest/users?action=validate&username=' + newValue, 
 
    success : function(response) { 
 
    // Ausuming responseText is {"valid" : true} 
 
    me.validFlag = Ext.decode(response.responseText).valid ? true : 'The username is duplicated!'; 
 
    me.validate(); 
 
    } 
 
    }); 
 
    } 
 
} 
 
}

mã html này tôi đã thử nghiệm (phiên bản extjs là 5.0), là ok, nó là từ TonyTuan'sB log, tất cả những điều này bạn có thể thấy liên kết này: http://code.tonytuan.org/2013/06/extjs-remote-validator-for-form-field.html

Các vấn đề liên quan