6

エンターキーを押したときにフォームを送信するために、さまざまな方法を試してきました。入力フィールドで機能することはわかっていますが、これはコメントになるため、テキスト領域である必要があります。

これは、フォームをボタンで送信するために現在持っているものです。

$('.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;
});

それは正常に動作します。送信ボタンを削除し、ユーザーが Enter キーを押したときにフォームを送信したいだけです。これに反対する人もいると思いますが、この Web サイトのユーザーは、Facebook などから Enter キーを押すことに慣れています。

このような方法を試しましたが、どれもうまくいかないようです。

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

ここに私のフォームコードがあります

<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>

どんな助けでも素晴らしいでしょう。また、フォームが Textarea の現在のデフォルト値で送信されないようにする if 関数を追加する方法を誰かが知っていれば、それは素晴らしいことです。現在、テキストエリアがどのように設定されているかで、送信を押すだけで送信されます ここにコメントを書いてください...

ありがとう

EDIT:回避策は...通常のように送信するボタンがありますが、非表示にして、Enterキーを押すとそのボタンの呼び出しがトリガーされますか?しかし、その後...新しい行に入る以外はテキストエリアで何もしないという同じ問題に遭遇しました...

4

3 に答える 3

27

ユーザーがシフトを使用して新しい行に移動できるようにすることも必要だと思います。

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

これを参照してください:http://jsfiddle.net/almirsarajcic/Gd8PQ/

それは私のために働いた。

また、現在持っている送信ボタンを削除する必要があります。

于 2012-10-27T19:04:44.893 に答える
12

この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;
});
​
​

</p>

于 2012-10-27T19:04:16.827 に答える
3

この方法で試してみてください

<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>

私はそれをテストしました、そしてそれはうまくいきました

event関数ヘッダーにパラメーターのみを追加しました

于 2012-10-27T19:01:54.020 に答える