2009-03-23 32 views
6

Tôi tự hỏi liệu có thể có plugin jQuery Validator xác thực các phần tử chưa tồn tại trong dom khi các quy tắc ban đầu được thiết lập hay không.jquery xác thực trên các thành phần chưa được tạo

Gọi phương thức .Rules ("add", therules) chỉ đính kèm các quy tắc cho các phần tử hiện đang tồn tại trong dom. Nếu tôi đã tạo ra một số. Việc xác thực không kích hoạt. Có suy nghĩ gì không?

trang chủ của validator Tôi đang sử dụng: http://bassistance.de/jquery-plugins/jquery-plugin-validation/

yếu tố mới đang được tạo ra thông qua http://ejohn.org/blog/javascript-micro-templating/

Về cơ bản có một cuộc gọi ajax và máy chủ trả về một loạt các json, json này được đưa (ajaj?) thông qua động cơ templating của resig. Một ví dụ mẫu trông giống như vậy:.

<script type="text/html" id="ProductsTemplateEdit"> 
    <td> 
     <input type="hidden" value="<#= item.ID #>" id="Edit.ID" name="Edit.ID" /> 
     <input type="text" value="<#= item.Price#>" id="Edit.Price" name="Edit.Price" /> 
    </td> 
</script> 

Các giá trị rõ ràng là điền vào thông qua json được thông qua tại

Tôi cũng nên đề cập đến mà tôi đang sử dụng khuôn khổ xác nhận xval, mà về cơ bản sẽ tự động tạo jquery xác nhận quy tắc cho tôi: http://blog.codeville.net/2009/01/10/xval-a-validation-framework-for-aspnet-mvc/

+0

Bạn đang thêm các mặt hàng của mình như thế nào? bạn có thể cung cấp mẫu mã không? Bạn cũng có thể liên kết đến trình cắm thêm jQuery Validator trong câu hỏi của mình không? – bendewey

+0

câu hỏi cập nhật với thông tin chi tiết – ChadT

Trả lời

2

Được rồi, hãy thử hai. Thêm yếu tố của bạn là gì? Bạn không thể chỉ đặt .Rules ("thêm",) vào cùng một mã?

+0

Tôi đang thực sự sử dụng phương pháp này vào lúc này, nhưng đã hy vọng sẽ có một cách tốt hơn (sử dụng một cái gì đó tương tự như các sự kiện trực tiếp như bạn đã đề xuất trước đó). – ChadT

+0

Tôi nghĩ phương pháp hiện tại của bạn là "đúng" hơn. Từ những gì bạn đã mô tả cho đến nay, có vẻ như bạn đã có khá một chút xảy ra phía khách hàng. Bạn đã bắt đầu nhận thấy hiệu suất giảm chưa? Lần cuối tôi nghe các sự kiện trực tiếp có thể giết chết hiệu suất. –

0

Bạn sẽ muốn xem xét jQuery 1.3 mới Live Events

+1

Tôi biết về các sự kiện trực tiếp, nhưng không thấy cách chúng có thể được điều chỉnh để sử dụng với jquery xác thực – ChadT

+0

tính đến v1.3.1 live() chỉ hỗ trợ "Giá trị sự kiện có thể có" sau: dblclick, mousedown, mouseup, mousemove, mouseover, mouseout, keydown, keypress, keyup " – bendewey

+0

Xin lỗi, tôi không hoàn toàn quen thuộc với internals của Validator, nhưng nó không nên nâng cao một số sự kiện tùy chỉnh? Nếu có, sự kiện trực tiếp có thể được sử dụng trong trường hợp đó. –

2

Xin đừng chắc đây có phải là hack không chính thức nhưng nó có hiệu quả với tôi không. Trước đó, tôi đã thực hiện từng() trên bộ chọn và chạy vào cùng một vấn đề mà bạn đang gặp phải với các phần tử Ajax được tạo mới.

di chuột của sự kiện trên sống dường như đã làm các trick, cấp ur không phải là điên với css của bạn:

// >>> MSG/Comment form validator, now and forever... 
    $('form.streamForms').live('mouseover', function(){ 
     $(this).validate({ 
      rules: { 
       text: "required" 

      }, 
      messages: { 
       text: " " 
      } 
     });  
    }); 

Hy vọng nó sẽ giúp!

+1

Hoặc, bạn có thể nghe 'click' thay vì 'mouseover' như sau: [Xác thực biểu mẫu đã tải AJAX] (http://forum.jquery.com/topic/validate-validating-an-ajax-loaded-form) –

+0

Thao tác này sẽ không kích hoạt nếu ai đó duyệt qua các trường, trực tiếp() cũng không hỗ trợ sự kiện lấy nét. – ChadT

0

Đây là cách tôi xử lý việc này. Đầu tiên tôi tạo đối tượng xác nhận của mình.

 

    var myvalidations = {}; 
    myvalidation.registerform = function() { $("#registerform").validate({ 
      submitHandler: function(form) { 
       $(form).ajaxSubmit(optionspersonal); 
       //submitReg(); 
      }, 
        rules: { 
       firstname: { 
        required: true, 
        minlength: 5, 
        maxlenght: 22 
       }, 
        messages: { 
          firstname: { 
           required: "Tell us what to call you by.", 
        minlength: "Your username must consist of at least 5 characters" 
          } 
        } 
      }); 
     } 

Bây giờ, bất cứ khi nào bạn tạo biểu mẫu, hãy đảm bảo có ID hoặc tham chiếu và chỉ cần gọi hàm ngay sau khi bạn tạo.

 

    //create my content 
    $('.content').html('--fields etc--'); 
    //add validation 
    myvalidation.registerform(); 

Mọi đề xuất thêm đều được chào đón; nhưng tôi nghĩ về cơ bản đây là cách tiếp cận đúng đắn.

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