2012-10-27 40 views
6

Tôi đã thử các phương thức khác nhau để nhận biểu mẫu để gửi khi nhấn phím enter. Tôi biết nó hoạt động với một lĩnh vực đầu vào, nhưng bởi vì đây sẽ là một bình luận, nó cần phải là một khu vực văn bản.Gửi biểu mẫu khi nhấn enter trong Textarea

Đây là những gì tôi hiện có để gửi biểu mẫu bằng một nút.

$('.messageSubmit').live('click', function(){ 
    var name = $(this).siblings('.messageTextarea').val(); 
    var theid = $(this).attr('data-the_id'); 
    var dataString = name; 

    $.ajax({ 
     dataType: 'json', 
     url: "https://api.instagram.com/v1/media/"+$(this).attr('data-the_id')+"/comments?"+hash, 
     type: "POST", 
     data: "text="+dataString, 
     success: function(data) { 
      // finish load 
      console.log(data, dataString, 'fail'); 
     }, 
     error: function(data) { 
      var username = JSON.parse(localStorage.getItem('iguser')); 
      var profilepic = JSON.parse(localStorage.getItem('iguserimg')); 
      //console.log(data, dataString, 'succ'); 

      $('.box[data-the_id="' + theid + '"]').children('.postMessage').children('.messageComments').append('<li><img class="commentUserImg" src="' + profilepic + '"><div class="commentUser">' + username + '</div><div class="commentText">' + dataString + '</div></li>'); 

      $('.messageTextarea').val(''); // Remove comment from TextArea 
     } 
    }); 
    return false; 
}); 

Nó hoạt động như bình thường. Tôi muốn xóa nút gửi và chỉ cần gửi biểu mẫu khi người dùng nhấn phím enter. Tôi biết một số người khuyên chống lại điều này, nhưng người dùng trên trang web này sẽ được sử dụng để đánh nhập từ Facebook và như vậy.

Tôi đã thử các phương pháp như vậy, nhưng dường như nó không hoạt động.

$('.messageTextarea').keydown(function() { 
    if (event.keyCode == 13) { 
     this.form.submit(); 
     return false; 
    } 
}); 

Đây là mẫu mã của tôi

<form> 
    <textarea class="messageTextarea" onfocus="if(this.value==this.defaultValue)this.value=\'\';" onblur="if(this.value==\'\')this.value=this.defaultValue;">Write your comment here...</textarea> 
    <input type="submit" data-the_id="' + theid + '" name="submit" class="messageSubmit" id="submit_btn" value="Submit your comment"> 
</form> 

Bất kỳ trợ giúp sẽ là tuyệt vời. Ngoài ra, nếu có ai biết cách thêm một hàm if sẽ ngăn cản biểu mẫu gửi với giá trị mặc định hiện tại trong Textarea, điều đó sẽ rất tuyệt vời. Hiện nay, với thế textarea được thiết lập bây giờ, nếu bạn chỉ cần nhấn gửi, nó sẽ nộp Viết bình luận của bạn ở đây ...

Cảm ơn

EDIT: Có thể một công trình xung quanh được ... Có một nút để gửi, như bình thường, nhưng có nó ẩn, và khi bạn nhấn vào nó kích hoạt một cuộc gọi cho nút đó? Nhưng sau đó ... Tôi muốn chạy vào cùng một vấn đề của nhập làm gì trong textarea trừ đột nhập vào một dòng mới ...

+1

Không bao giờ có ý tưởng hay để sửa đổi cách thức hoạt động của các phần tử phổ biến. Người dùng sẽ mong đợi rằng textarea cho phép sử dụng phím enter. Sau đó, một lần nữa, ngăn xếp tràn làm như vậy ...hạt muối –

+1

Đó là cách tôi lần đầu tiên tiếp cận vấn đề này, nhưng người dùng duy nhất trên trang web này sẽ là những người của instagram và facebook. Tôi nghĩ họ sẽ biết phải làm gì khi nhìn thấy một lĩnh vực bình luận. – Ryan

Trả lời

12

thử này jsfiddle

HTML:

<form> 
    <textarea class="messageTextarea">Write your comment here...</textarea> 

</form>​ 

JS:

 $('.messageTextarea').keydown(function(event) { 
    if (event.keyCode == 13) { 
     $(this.form).submit() 
     return false; 
    } 
}).focus(function(){ 
    if(this.value == "Write your comment here..."){ 
     this.value = ""; 
    } 

}).blur(function(){ 
    if(this.value==""){ 
     this.value = "Write your comment here..."; 
    } 
}); 

$("form").submit(function(){ 
     var name = $(this).siblings('.messageTextarea').val(); 
    var theid = $(this).attr('data-the_id'); 
    var dataString = name; 

    $.ajax({ 
     dataType: 'json', 
     url: "https://api.instagram.com/v1/media/"+$(this).attr('data-the_id')+"/comments?", 
     type: "POST", 
     data: "text="+dataString, 
     success: function(data) { 
      // finish load 
      console.log(data, dataString, 'fail'); 
     }, 
     error: function(data) { 
      var username = JSON.parse(localStorage.getItem('iguser')); 
      var profilepic = JSON.parse(localStorage.getItem('iguserimg')); 
      //console.log(data, dataString, 'succ'); 

      $('.box[data-the_id="' + theid + '"]').children('.postMessage').children('.messageComments').append('<li><img class="commentUserImg" src="' + profilepic + '"><div class="commentUser">' + username + '</div><div class="commentText">' + dataString + '</div></li>'); 

      $('.messageTextarea').val(''); // Remove comment from TextArea 
     } 
    }); 

    return false; 
}); 
​ 
​ 

+0

Vì vậy, điều này làm việc trong fiddle .. Nhưng tôi không thể làm cho nó làm việc cho tôi. Tôi có nên đặt AJAX bên trong của If? – Ryan

+0

Chỉ hoạt động sau khi xóa nút nhập. cố gắng loại bỏ nút đầu vào. – Anoop

+0

Nhưng ajax, liệu điều đó có nên tiếp tục? – Ryan

3

thử nó theo cách này

<form method="post" action=""> 
    <textarea></textarea> 
</form> 

<script type="text/javascript" src="./lib/js/jquery/jquery-1.8.1.min.js"></script> 

<script type="text/javascript"> 
    jQuery('textarea').keydown(function(event) { 
     if (event.keyCode == 13) { 

      this.form.submit(); 
      return false; 
     } 
    }); 
</script> 

Tôi đã thử nghiệm nó, và nó làm việc

tôi thêm chỉ tham số event vào tiêu đề chức năng

+0

Tôi đã thử nó theo cách này là tốt, nó chỉ cần thêm một break mới như là một khóa nhập sẽ được dự kiến ​​quá. – Ryan

+0

tốt, bạn có nhìn thấy tham số 'sự kiện' trong tiêu đề chức năng không? – bukart

+0

Có, tôi đã thấy nó. Nó vẫn hoạt động như một lần nhập thay vì gửi. – Ryan

26

Tôi nghĩ bạn cũng sẽ muốn cung cấp cho người dùng khả năng để đi đến dòng sản phẩm mới sử dụng sự thay đổi.

$('.messageTextarea').on('keyup', function(e) { 
    if (e.which == 13 && ! e.shiftKey) { 
     // your AJAX call 
    } 
}); 

Xem này: http://jsfiddle.net/almirsarajcic/Gd8PQ/

Nó làm việc cho tôi.

Ngoài ra, bạn cần phải xóa nút gửi mà bạn hiện có.

+1

Tôi cảm thấy như thế này là gần gũi, và tôi thấy làm thế nào AJAX nên được trong chức năng, nhưng một lần nữa, nó không hoạt động ... – Ryan

+1

Tôi đã cập nhật câu trả lời của tôi, hãy thử lại. –

+1

Thật tuyệt vời! Cảm ơn. – Bluedayz

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