2012-03-12 36 views
10
$(window).keydown(function(event){ 
    if(event.keyCode == 13) { 
     event.preventDefault(); 
     return false; 
    } 
    }); 

Ở trên là mã tôi đã thực hiện việc cắt khóa "nhập" một cách hiệu quả trong suốt hệ thống. Tôi muốn. Tuy nhiên, phím enter cũng bị vô hiệu hóa trên các thẻ textarea - mà người dùng sẽ có thể nhấn enter để đi đến các hàng tiếp theo. Vì vậy, có một cách để sửa đổi mã trên để phát hiện NẾU nhập là đến từ bên trong một thẻ textarea, nó không chạy event.preventDefault(); hàng?Ngăn chặn "Nhập" từ việc gửi biểu mẫu, nhưng cho phép nó trên các trường văn bản (jQuery)

Tôi có rất nhiều biểu mẫu trong toàn bộ trang web - phải định cấu hình riêng lẻ chúng sẽ là một cơn ác mộng và có thể không có ý nghĩa - có một cách phổ biến. Mã trên chạy trên mọi trang của trang web để ngăn chặn các lần gửi ngẫu nhiên bằng cách nhấn "enter". enter code here

Trả lời

10

tôi muốn sự kiện keyup ... sử dụng tài sản event.target

$(window).keydown(function(event){ 
    if((event.which== 13) && ($(event.target)[0]!=$("textarea")[0])) { 
     event.preventDefault(); 
     return false; 
    } 
    }); 

demo

+0

Đã không hoàn toàn công việc - nhấn Enter trên lĩnh vực đầu vào thường xuyên submit form, mà không phải là điều tôi muốn. – jeffkee

+1

là 'textarea' được xác định? – rjz

+0

@jeffkee cập nhật câu trả lời với bản trình diễn cũng đã sửa mã – Rafay

0

Tại sao không chỉ chặn sự kiện của hình thức submit từ kích hoạt để thay thế?

$('form').submit(function(event){ 
    event.preventDefault(); 
}); 
+0

Vì có các biểu mẫu được gửi bởi loại nút đầu vào gửi, vì vậy tôi không thể ngăn chặn điều đó. không phải tất cả các đệ trình được định hướng javascript (mặc dù hầu hết là do xác nhận biểu mẫu). – jeffkee

3

@ 3nigma 's giải pháp sẽ chỉ làm việc tốt nhưng ở đây một cách khác để đạt được hành vi này:

$(function(){ 
    $('#myform').find('input,select').keydown(function(event){ 
     if (event.keyCode == 13){ 
      event.preventDefault(); 
     } 
    }); 
}); 
1

Điều này có vẻ giống như một cơ hội tốt để sử dụng các đối tượng sự kiện và một con dao giống như tiếp cận trên con muỗi này thay vì một cách tiếp cận giống như pháo.

Nói cách khác, một cái gì đó như thế này:

... 
// Only watch for a bad type of submission when a submission is requested. 
$('form .contact-form').submit(function(e){ 
    // If a submit is requested, and it's done via keyboard enter, stop it. 
    if ((e.keyCode || e.which) == 13) ? ;){ // Try to use normalized enter key code 
     e.preventDefault(); // Prevent the submit. 
    } 
    // All other mouse actions just go through. 
}); 

Ưu điểm ở đây nên được tương đối rõ ràng, nếu bạn nhấn enter bất cứ nơi nào mà không gửi biểu mẫu, mã này không biết, không chăm sóc, không gây ra vấn đề gì.

7

Bạn có thể thử này

$(document).ready(function(){ 
    $(window).keydown(function(event){ 
     if(event.keyCode == 13 && event.target.nodeName!='TEXTAREA') 
     { 
      event.preventDefault(); 
      return false; 
     } 
    }); 
}); 

Một fiddle là here.

+1

Điều này hoạt động tốt, vì nó không chỉ phù hợp với vùng văn bản thứ nhất. Nó bao gồm tất cả các textareas trên trang. Cảm ơn đống. –

1

Tôi đã thấy tính năng này hoạt động tốt nhất. Đặc biệt nếu bạn muốn sử dụng các hành vi nhập quan trọng trong các yếu tố khác chỉ cần không gửi biểu mẫu trở lại. Tôi chỉ đang mở rộng câu trả lời của 3nigma.

$("form").keypress(function (event) { 
      if (event.keyCode == 13 && ($(event.target)[0]!=$("textarea")[0])) { 
       return false; 
      } 
     }); 
2
$('#form_editar').keypress(function(e) { 
    var allowEnter = {"textarea": true, "div": true}; 
    var nodeName = e.target.nodeName.toLowerCase(); 

    if (e.keyCode == 13 && allowEnter[nodeName] !== true) { 
     e.preventDefault(); 
    } 
}); 

tôi sửa từ @The Alpha một chút, tôi sử dụng div cho trình soạn thảo WYSIWYG:) ...

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