2011-09-08 41 views
7

Tôi muốn có một hộp trò chuyện (textarea) nơi người dùng nhấn Enter, sau đó nó sẽ gửi trò chuyện và nếu người dùng nhấn Shift + Enter nó phải nhập vào một dòng mới.Gửi giá trị khi nhấn Enter trong vùng văn bản và nhấn Shift + Enter phải đi tới dòng tiếp theo

Tôi đã thử một số thứ nhưng không thể tìm ra khóa chính xác hoặc phím điều khiển chính xác. Mã Tôi đang sử dụng tại thời điểm này là:

$("textarea").keydown(function(e){ 
    if (e.keyCode == 13 && !e.shiftKey) 
    { 
     e.preventDefault(); 
    } 
}); 

jsFiddle

Ngoài ra tôi muốn nhận được \n tại chỗ khi Nhập phím Shift + được nhấn.

EDIT

Vấn đề với mã của tôi là: -

Khi tôi kiểm tra các nội dung trên khách hàng sử dụng sử dụng cảnh báo sau đó nó cho thấy dòng tiếp theo. Nhưng khi tôi đăng nó thì đường ray của tôi sẽ kết thúc. Sau đó, nó chỉ là một chuỗi đơn giản. Không có điều gì mới ở đó.

Đây là cách tôi gửi các cuộc trò chuyện đến máy chủ.

$.post("/incomingchat", { body:$("#chat_" + group_id).val() }, 
    function(data){ 
     // do something.. 
    }); 
+6

Vui lòng không ** chỉ ** liên kết đến jsfiddle; luôn bao gồm mã trong câu hỏi. – Matt

+1

Có gì sai với mã bạn đã đăng? Đối với tôi nó hoạt động giống như bạn mô tả? http://jsfiddle.net/Su5ts/25/ – ChrisR

+1

@Matt Xin lỗi, hãy ghi nhớ điều này. –

Trả lời

2

Tôi đã trả lời câu hỏi này trước đây. Đó là một chút khó khăn nếu caret không phải là ở phần cuối của textarea:

How do I detect "shift+enter" and generate a new line in Textarea?

+0

Vấn đề là khi tôi đăng dữ liệu này bằng cách sử dụng Jquery đến máy chủ phụ trợ của tôi. Làm thế nào tôi có thể nhận diện khóa enter + shift? ở cuối cùng của nó giống như không có phím enter + shift –

+0

@Mohit: Tôi không hiểu. Giá trị của vùng văn bản sau khi nhấn shift + enter sẽ chứa ngắt dòng và ngắt dòng này chắc chắn sẽ được gửi đến máy chủ khi bạn đăng. –

+0

@TimDown: Tôi có một câu hỏi liên quan. Trong Chrome, nếu tôi xử lý sự kiện nhấn phím khi nhập phím được nhấn bằng cách thêm ký tự dòng mới '\ n' và nếu vùng văn bản có thể cuộn được, thanh cuộn sẽ không hoạt động, ý tôi là nếu tôi nhấn phím enter, textarea sẽ không cuộn khi tôi gõ. Bạn có bất kỳ ý tưởng cho vấn đề này? –

3
$("textarea").keydown(function(e) 
{ 
    if (e.keyCode == 13) 
    { 
     if (e.shiftKey) { 
      $(this).val($(this).val() + "\n"); 
     } 
     else { 
      submitTheChat(); 
     } 
    } 
}); 
+0

Vấn đề là khi tôi đăng dữ liệu này bằng cách sử dụng Jquery đến máy chủ phụ trợ của tôi. Làm thế nào tôi có thể nhận diện khóa enter + shift? ở phía sau kết thúc của nó giống như không có phím enter + shift –

1

Xem xét sử dụng các sự kiện bấm phím để thay thế. Nếu bạn chạy mã trong jsfiddle, bạn sẽ thấy rằng một dòng mới không được thêm khi bạn nhấn enter.

$("textarea").keypress(function(e){ 
    if (e.keyCode == 13 && !e.shiftKey) 
    {   
     e.preventDefault(); 
     //now call the code to submit your form 
     alert("just enter was pressed"); 
     return; 
    } 

    if (e.keyCode == 13 && e.shiftKey) 
    {  
     //this is the shift+enter right now it does go to a new line 
     alert("shift+enter was pressed");   
    }  
}); 
+0

Vấn đề là khi tôi gửi dữ liệu này bằng cách sử dụng Jquery đến máy chủ phụ trợ của tôi. Làm thế nào tôi có thể nhận diện khóa enter + shift? ở phía sau kết thúc giống như không có phím enter + shift –

+0

Ok tôi hiểu rồi. Trong trường hợp đó tôi đề nghị xem xét câu trả lời của Tim Down rằng anh ta đã đăng ở trên. – pedrodg

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