2013-03-21 5 views
5

Đây là mã: Cách sử dụng onClick CHỈ nếu trường nhập email hợp lệ?

<input id="subscribe-email" type="email" placeholder="[email protected]" /> 
      <button type="submit" id="subscribe-submit" onClick="javascript:omgemailgone();" /> 

Làm thế nào để kiểm tra và chạy chức năng JS chỉ khi email là hợp lệ (validation bởi user-agent, không có kiểm chứng thực bổ sung)?

CẬP NHẬT. Trình duyệt mới có thể xác thực đầu vào = email của chính chúng, cũng có các lớp giả: hợp lệ và: không hợp lệ. Tôi chỉ cần chạy chức năng nếu trình duyệt 'biết' rằng email hợp lệ.

Trả lời

10

Bạn có thể sử dụng phương pháp .checkValidity() của phần tử đầu vào (trong trường hợp này, gửi email cho tôi trường nput). Điều này sẽ trả về một boolean cho biết kết nối đầu vào có hợp lệ hay không. Đây là một fiddle để chơi với:

http://jsfiddle.net/QP4Rc/4/

Và mã:

<input id="subscribe-email" type="email" required="required" placeholder="[email protected]" /> 

<button type="submit" id="subscribe-submit" onClick="check()"> 
click me 
</button> 

function check() 
{ 
    if(!document.getElementById("subscribe-email").checkValidity()) 
    { 

    //do stuff here ie. show errors 
    alert("input not valid!"); 

    }else 
    { 
     callMeIfValid(); 
    } 
} 

function callMeIfValid() 
{ 
    //submit form or whatever 
    alert("valid input"); 
} 
+0

Cảm ơn, nhưng không, không hoạt động. Trả về cảnh báo nhưng cũng chạy các nội dung khác. Trong JSFiddle thậm chí không có cảnh báo. [link] (http://jsfiddle.net/Moor/j9t38/2/) –

+0

Bạn đang thử nghiệm trình duyệt nào? Tôi đã kiểm tra fiddle của tôi trên Chrome, Firefox và Safari và cảnh báo đang hiển thị tốt. Nếu bạn muốn một số mã chạy CHỈ nếu trường email hợp lệ, bạn nên thêm mã vào một điều kiện khác. Tôi sẽ cập nhật mã và fiddle. – danii

+0

Chrome, IE10, Opera 12. Thật vậy, tôi đã giải quyết được câu hỏi của mình chỉ cần thay đổi

1

Bạn có thể sử dụng Regular expressions để kiểm tra email có giá trị trên bạn omgemailgone():

function omgemailgone(){ 
    var mail = $('#subscribe-email').val(); 

    //Example of regular expression 
    if(mail.match(/YourRegexp/) 
    { 
     //Do stuff 
    } 
    else alert("Invalid e-mail"); 

} 

(sử dụng jQuery đây)

+0

Xin lỗi, có vẻ như câu hỏi của tôi là không hỏi rõ ràng. các trình duyệt mới xác nhận tính hợp lệ của input = email của chính chúng. Tôi chỉ cần chạy chức năng nếu trình duyệt 'biết' rằng email hợp lệ. –

+0

Bên cạnh đó bạn (1) quên các dấu gạch chéo xung quanh biểu thức chính quy và (2) regex không khớp với các địa chỉ hợp lệ như "[email protected]". –

+0

Tôi đã tìm thấy mẫu xác thực RFC2822, thêm dấu gạch chéo, nhưng có vẻ như có xung đột với dấu gạch chéo. Đây là ảnh chụp nhanh http://s3.hostingkartinok.com/uploads/images/2013/03/f027bc17748de792ec37d42125af9d61.png –

0

u cần một hàm xác nhận email và trở về đúng hay sai Validate email address in JavaScript?

<button type="submit" id="subscribe-submit" onClick="javascript:validateEmail(document.getElementById('subscribe-email').value) ? omgemailgone() : alert('email is wrong dude');" /> 

Đây là một giải pháp nhanh chóng, tôi khuyên bạn nên làm điều đó đúng, không sử dụng inline onclick js

+0

Xin lỗi, có vẻ như câu hỏi của tôi không được hỏi rõ ràng. các trình duyệt mới xác nhận tính hợp lệ của input = email của chính chúng. Tôi chỉ cần chạy chức năng nếu trình duyệt 'biết' rằng email hợp lệ. –

+1

html5 type = email không tương thích trong safari. Kết quả là, mọi người có thể vượt qua lớp bảo vệ này bằng cách tải xuống safari ... javascript có thể bị tắt vì vậy tôi khuyên bạn nên sử dụng xác thực php để được bảo mật càng tốt –

1

séc Validate email address in JavaScript? để xác nhận và sau đó thực hiện nó thành một câu lệnh if trong phương pháp omgemailgone của bạn (nếu có giá trị tiếp tục, nếu không làm gì cả)

chỉnh sửa :

function validateEmail(email) { 
    var re = /^(([^<>()[\]\\.,;:\[email protected]\"]+(\.[^<>()[\]\\.,;:\[email protected]\"]+)*)|(\ 
".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA 
-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; 
    return re.test(email); 
} 

từ liên kết

+0

Xin lỗi, có vẻ như câu hỏi của tôi không được hỏi rõ ràng. các trình duyệt mới xác nhận tính hợp lệ của input = email của chính chúng. Tôi chỉ cần chạy chức năng nếu trình duyệt 'biết' rằng email hợp lệ. –

+0

Vì vậy, bạn đang tìm kiếm một cách để truy cập vào giá trị của xác nhận? –

+0

Nếu nó ở dạng, nút gửi sẽ không làm bất cứ điều gì cho đến khi một email hợp lệ được nhập vào. –