2013-03-12 43 views
6

Tôi đang sử dụng jQuery Validate plugin để xác thực trường email trong biểu mẫu của tôi bằng cách thực hiện yêu cầu ajax để đảm bảo rằng email chưa được người dùng khác thực hiện. Tôi làm như vậy bằng cách thêm một quy tắc như thế này:Xác thực sẽ không gửi biểu mẫu bằng séc ajax

//make sure email field is on form before adding rule 
if ($(".unique_email").is("*")) { 
    //remote validation 
    $(".unique_email").rules("add", { 
     remote: "http://test.nethop.com/test.cgi", 
     messages: { 
      remote: "This email is already in use" 
     } 
    }); 
} 

Tuy nhiên, bất cứ khi nào tôi nhấn 'submit' trên biểu mẫu, đầu tiên nó sẽ làm một yêu cầu ajax để đảm bảo email không được thực hiện, và sau đó nó sẽ không gửi ngay cả khi email xác nhận là không sao. Bạn phải nhấn gửi một lần nữa và sau đó nó sẽ gửi. Có ai biết tại sao điều này?

Tôi đã thiết lập một số jsfiddle trình bày sự cố. Nếu bạn sử dụng công cụ nhà phát triển chrome hoặc firebug, bạn có thể xem yêu cầu ajax đang được thực hiện, trả lại true và vẫn không gửi.

HTML

<form id="listing" method="post"> 
    <ul> 
     <li> 
      <label for="username">Email *</label> 
      <input type="text" name="username" id="username" autocomplete="off" 
      class="email required unique_email" value="[email protected]" /> 
     </li> 
     <li> 
      <input type="submit" name="submit" id="submit" class="btn" value="Save" 
      /> 
     </li> 
    </ul> 
</form> 

Kịch bản đầy đủ:

$(document).ready(function() { 
    var validator = $("form").validate({ 
     onkeyup: false, 
     onblur: true, 
    }); 

    if ($(".unique_email").is("*")) { 
     //remote validation 
     $(".unique_email").rules("add", { 
      remote: "http://test.nethop.com/test.cgi", 
      messages: { 
       remote: "This email is already in use" 
      } 
     }); 
    } 
}); 
+1

Mặc dù là một bản sao vẫn 1 cho câu hỏi hay và cũng có thể thêm mã đầy đủ từ fiddle cho đầy đủ trong trường hợp fiddle đi xuống/chết hoặc liên kết-thối. Bằng cách đó, câu hỏi này hữu ích cho người dùng có vấn đề tương tự trong tương lai. Đặc biệt thấy rằng các tên/id HTML là một phần của vấn đề/giải pháp. – Nope

+0

@ FrançoisWahl: Đồng ý, tôi muốn tôi có thể hủy bỏ phiếu bầu của mình, đây là câu hỏi ngắn gọn hơn nhiều để chứng minh tốt hơn vấn đề. –

+0

@AndrewWhitaker: Tôi cũng đã bỏ phiếu cho bản sao, hoàn toàn là nguyên nhân, bất kể chất lượng của câu hỏi. Do đó +1 vì nó là một câu hỏi hay giải quyết một vấn đề khá phổ biến. Mặc dù tôi thích câu hỏi này tốt hơn vì nó có chất lượng tốt hơn nhưng nó vẫn đáng buồn là một bản sao. Tuy nhiên, câu hỏi trùng lặp không bị xóa. Theo như tôi biết chỉ đơn thuần là ngăn chặn câu trả lời nhiều hơn từ được đăng, vẫn làm cho câu hỏi này là một câu hỏi chất lượng tốt để đi qua từ google – Nope

Trả lời

5

Được rồi, cái này là loại kỳ lạ để chịu với tôi.

Thực tế là bạn có input với tên/id submit đang gây ra sự cố. Tôi nghĩ rằng điều này là do dưới mui xe, jQuery xác thực đang gọi form.submit. Trong trường hợp của bạn, form.submit là một phần tử biểu mẫu và do đó, điều này không có gì.

Nếu bạn đổi tên nút submit, mọi thứ đều hoạt động tốt.

Ví dụ:http://jsfiddle.net/42TK4/7/

+0

wow, giải pháp tuyệt vời. Làm thế nào bạn theo dõi đó xuống? – srchulo

+0

@srchulo: Cảm ơn - Tôi rất may mắn ... Tôi nhận thấy nút gửi và biết rằng các thành phần biểu mẫu có thể được truy cập theo tên. –

+0

Tuyệt vời! +1 –

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