2013-02-27 23 views
15

Với cấu hình xác thực jquery của tôi, tôi nhận được lỗi sau khi thiết lập onkeyup thành true. Nó hoạt động nếu tôi đặt nó là sai, nhưng tôi không nhận được phản hồi xác nhận cho đến khi tôi làm mờ lĩnh vực này, và tôi đang tìm cách để có được xác nhận trên mỗi KeyUp:jQuery.validate.js onkeyup = true error

$("#signupForm").validate({ 
     onkeyup: true,   
     onclick: false 
     // rules omitted for brevity 
    } 

tôi nhận được lỗi sau:

TypeError: validator.settings[eventType].call is not a function 
validator.settings[eventType].call(validator, this[0], event); 
jquery.validate.js line 391 
+0

Bạn có thể tạo ra một câu hỏi hay không http://jsfiddle.net –

Trả lời

32

Bạn thực sự cần phải thiết lập các tùy chọn onkeyup đến một chức năng chấp nhận nguyên tố này được xác nhận như một tham số, vì vậy hãy thử thay đổi:

onkeyup: true, 

để

onkeyup: function(element) {$(element).valid()} 
+3

Chỉ cần xóa tùy chọn 'onkeyup' khôi phục chức năng" onkeyup "đã được tích hợp vào plugin, phần nào phức tạp hơn' $ (phần tử) .valid() '. – Sparky

+0

Vì lý do nào đó, đây là câu trả lời hiệu quả. Cảm ơn! –

+1

@AdamLevitt, việc xóa 'onkeyup' hoàn toàn khôi phục chức năng mặc định của nó, đó là" bật lên ". Xem: http://jsfiddle.net/ZvvTa/ – Sparky

4

@Sparky là đúng, Câu trả lời đúng là để loại bỏ các tùy chọn onkeyup, fiddle của tôi là làm việc vì tôi loại bỏ các tùy chọn onkeyup không phải vì tôi đã thay đổi nó để keyup.

Theo mặc định, xác thực sẽ xảy ra trên sự kiện khóa, nếu bạn muốn tắt tính năng này thì bạn phải thêm cài đặt onkeyup: false.

Xem bản trình diễn được cập nhật.

Demo: Fiddle

+0

Câu trả lời này chắc chắn có vẻ tốt, nhưng vì một lý do nào đó nó không hoạt động đối với tôi. –

+0

Câu trả lời này không hoạt động vì không có tùy chọn nào cho plugin này. Xem: http://docs.jquery.com/Plugins/Validation/validate#toptions – Sparky

+1

@Sparky cảm ơn, tôi nghĩ đây là lần thứ hai bạn chỉnh sửa tôi về vấn đề này. Tôi sẽ cố gắng không quên nó một lần nữa –

3

giá trị boolean không phải là giá trị hợp lệ cho sự kiện onkeyup. Thay vào đó, hãy thêm một hàm, vào những gì cần làm. Hãy thử một cái gì đó như:

onkeyup: function(element) { 
      $(element).valid(); 
    } 
    onblur: function(element) { 
     $(element).valid(); 
    } 
+1

Đúng. Tuy nhiên, nếu OP muốn xác thực xảy ra trên mọi sự kiện keyup, anh ta chỉ cần xóa tùy chọn 'onkeyup' để khôi phục chức năng" onkeyup "đã được tích hợp vào plugin. Nó cũng không đơn giản như '$ (phần tử) .valid()'. – Sparky

+2

Ngoài ra, bạn chỉ ** một nửa ** đúng bằng cách nói _ "giá trị boolean không phải là giá trị hợp lệ cho sự kiện onkeyup" _. Theo tài liệu, một 'false' boolean là cách hợp lệ để vô hiệu hóa tùy chọn này. Chỉ một boolean 'true' không hợp lệ. – Sparky

+0

Cảm ơn .. hữu ích khi biết .. – Anusha

30

onkeyup được kích hoạt theo mặc định, do đó bạn không cần phải đặt nó vào true. Nếu bạn làm thế, bạn phá vỡ các chức năng đã được xây dựng vào plugin.

Bạn có ba lựa chọn:


1) Rời khỏi onkeyup lựa chọn ra khỏi .validate(). Điều này giữ chức năng onkeyupđược bật theo mặc định. (Chỉnh sửa: "theo mặc định" có nghĩa là xác nhận xảy ra trên tất cả các "key-up" sự kiện chỉ sau lĩnh vực này ban đầu được xác nhận bởi sự kiện khác.)

DEMO: http://jsfiddle.net/ZvvTa/


2)onkeyup có thể được đặt thành false để tắt tùy chọn này.

DEMO: http://jsfiddle.net/ZvvTa/1/


3) Thay onkeyup với hàm callback của riêng bạn để sửa đổi làm thế nào nó hoạt động. (Demo sử dụng chức năng mặc định)

DEMO: http://jsfiddle.net/ZvvTa/2/

Dưới đây là mặc định, chưa sửa đổi chức năng, onkeyup callback:

onkeyup: function(element, event) { 
    if (event.which === 9 && this.elementValue(element) === "") { 
     return; 
    } else if (element.name in this.submitted || element === this.lastElement) { 
     this.element(element); 
    } 
} 

Xem: http://docs.jquery.com/Plugins/Validation/validate#toptions


EDIT:

Theo mặc định, các plugin không làm bất cứ "chìa khóa-up" xác nhận cho đến khi sau lĩnh vực này ban đầu được xác nhận bởi sự kiện khác. ("Lazy" xác nhận)

Vì vậy, đây là một phiên bản sửa đổi đúng hơn về chức năng onkeyup callback mà sẽ cung cấp ngay lập tức onkeyup xác nhận. ("háo hức" xác nhận)

DEMO: http://jsfiddle.net/QfKk7/

onkeyup: function (element, event) { 
    if (event.which === 9 && this.elementValue(element) === "") { 
     return; 
    } else { 
     this.element(element); 
    } 
} 
+0

Lấp lánh, cảm ơn rất nhiều vì những nỗ lực tận tụy của bạn. Tôi khuyên bạn nên đặt thủ công hàm này vào phiên bản của khóa onkeyup? Hoặc là an toàn để thay thế việc triển khai mặc định trong mã jquery.validate.js? Tôi giả định cái cũ. –

+0

@AdamLevitt, CÓ, giả định ban đầu của bạn là chính xác. Không cần sửa đổi plugin Validate. Nó có nghĩa là để được thực hiện trong '.validate()' khởi tạo, giống như trong [my jsFiddle] (http://jsfiddle.net/QfKk7/). – Sparky

+0

Cảm ơn @Sparky ... giải pháp thứ ba của bạn đã giải quyết được vấn đề "onfocusout" không hoạt động lần đầu tiên giống như bạn đã nói. 'onfocusout: function (element, event) { nếu (event.which === 9 && this.elementValue (element) ===" ") { trả lại; } else { this.element (element); } } ' – MarioAraya

1

Làm thế nào về việc gia hạn onkeyup:

$('#signup-form').validate({ 

     onkeyup: function(element) { 
      var element_id = $(element).attr('id'); 
      if (this.settings.rules[element_id].onkeyup !== false) { 
       $(element).valid(); 
      } 
     }, 

Bây giờ trong quy tắc bạn có thể làm điều này:

 rules: { 
      username: { 
       required: true, 
       minlength: 3, 
       maxlength: 25, 
       onkeyup: false, /* on blur validation */ 
      }, 
      password: { 
       required: true,     
       passwordmeter: true, 
       onkeyup: true, /* on keyup validation */ 
      }, 

Bằng cách mở rộng onkeyup, chúng tôi đã thực hiện hành vi mặc định, do đó, việc gắn bó onkeyup: true là tùy chọn.

+0

** Không hoạt động và gây ra một loạt lỗi JavaScript **: https://jsfiddle.net/L7vza07w - Ngoài ra, các tùy chọn plugin được dự định là toàn cầu cho toàn bộ biểu mẫu, chúng không bao giờ được gán một trường theo từng trường trong đối tượng quy tắc. – Sparky

+0

BTW - trong phương thức '.validate()', nó phải là 'this.element (element)', không bao giờ '$ (element) .valid()'. Trong những tình huống nhất định, sau này có thể gây ra một vòng lặp vô hạn – Sparky