2011-09-12 19 views
7

dojo newbie - cho nó một shot. Sau khi gửi biểu mẫu, Nếu một lỗi được trả về từ máy chủ tôi muốn hiển thị thông báo rằng trên dijit.form.ValidationTextBoxdojo - cách lập trình để hiển thị thông báo không hợp lệ

var user_email = dijit.byId("login_user_email"); 
user_email.set("invalidMessage", data["result"]["user_email"]); 
//need to force show the tooltip but how??? 

Bất kỳ giúp nhiều đánh giá cao.

Trả lời

2

bạn cần thực hiện xác thực trong phương thức trình xác thực. như ở đây http://docs.dojocampus.org/dijit/form/ValidationTextBox-tricks bạn cũng cần tập trung tiện ích để hiển thị thông báo! tập trung()

+0

nhờ: đáng tiếc tôi không thể hiển thị tooltip mà không đi qua các phương pháp xác nhận. Tôi chỉ đang cố gắng thể hiện kết quả của sự tương tác với máy chủ thông qua tooltip cho ValidationTextBox – Chin

3

Tôi nghĩ bạn có thể hiển thị chú giải công cụ thông qua myVTB.displayMessage ('điều này đến từ xác thực kết thúc sau'); phương pháp

11

Xem hoạt động tại jsFiddle.

  1. Chỉ hiển thị tooltip:

    var textBox = bijit.byId("validationTextBox"); 
    dijit.showTooltip(
        textBox.get("invalidMessage"), 
        textBox.domNode, 
        textBox.get("tooltipPosition"), 
        !textBox.isLeftToRight() 
    ); 
    
  2. Tạm thời chuyển TextBox validator, lực lượng xác nhận, khôi phục lại validator gốc:

    var originalValidator = textBox.validator; 
    textBox.validator = function() {return false;} 
    textBox.validate(); 
    textBox.validator = originalValidator; 
    

Hoặc làm cả hai cùng một lúc.

+0

Tôi thích :) Có vẻ như sẽ có nhiều hơn về điều này, tôi cho rằng họ sẽ cho rằng bạn chỉ cần tạo widget của riêng mình. .? – Phix

+0

# 2 là khó xử ... Dù sao nó hoạt động. –

+0

# 2 làm việc cho tôi cảm ơn. Chỉ sửa đổi tôi phải thực hiện là đặt trọng tâm vào hộp văn bản của tôi là dòng đầu tiên: 'textBox.focus();' – Darrelk

0

Tôi biết câu hỏi này là cổ xưa, nhưng hy vọng điều này sẽ giúp ai đó. Có, bạn nên sử dụng trình xác nhận, nhưng nếu bạn có một lý do để không, điều này sẽ hiển thị các thông điệp và làm mất hiệu lực trên sân:

 function(textbox, state /*"Error", "Incomplete", ""*/, message) { 
      textbox.focus(); 
      textbox.set("state", state); 
      textbox.set("message", message); 
     } 
0

Bạn có thể gọi trực tiếp "private" chức năng:

textBox._set('state', 'Error');

Bạn nhận được kết quả tương tự như @phusick được đề xuất nhưng có ít mã hơn và được cho là theo cách trực tiếp và rõ ràng hơn.

Ghi chú: _set có sẵn cho ValidationTextBox như được khai báo trên lớp cơ sở dijit/_WidgetBase.

Live Demo: http://jsfiddle.net/gibbok/kas7aopq/

dojo.require("dijit.form.Button"); 
dojo.require("dijit.form.ValidationTextBox"); 
dojo.require("dijit.Tooltip"); 

dojo.ready(function() { 

    var textBox = dijit.byId("validationTextBox"); 

    dojo.connect(dijit.byId("tooltipBtn"), "onClick", function() { 

    dijit.showTooltip(
     textBox.get('invalidMessage'), 
     textBox.domNode, 
     textBox.get('tooltipPosition'), !textBox.isLeftToRight() 
    ); 
    }); 

    dojo.connect(dijit.byId("validatorBtn"), "onClick", function() { 
    // call the internal function which set the widget as in error state 
    textBox._set('state', 'Error'); 
    /* 
     code not necessary 
     var originalValidator = textBox.validator; 
     textBox.validator = function() {return false;} 
     textBox.validate(); 
     textBox.validator = originalValidator; 
    */ 
    }); 

}); 
1

giải pháp @arber là tốt nhất khi sử dụng võ đường mới. Chỉ cần nhớ đặt tiêu điểm vào TextBox trước khi gọi phương thức "displayMessage". Tôi đang sử dụng võ đường 1.10 mà việc tạo như sau:

function showCustomMessage(textBox, message){ 
    textBox.focus(); 
    textBox.set("state", "Error"); 
    textBox.displayMessage(message); 
} 

Dojo tham khảo guid cho ValidationTextBox: https://dojotoolkit.org/reference-guide/1.10/dijit/form/ValidationTextBox.html

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