【问题标题】:Run jQuery AJAX when hitting 'enter / return'点击“输入/返回”时运行 jQuery AJAX
【发布时间】:2011-09-08 20:35:42
【问题描述】:

我有一个简单的表格供用户在“墙上”发帖。如您所见,它有一个文本输入字段和一个提交按钮,该按钮由多个通过 CSS 设置样式的跨度组成。

<form action="http://example.com/2/chat_share" method="post" id="chat_form">                    
<input type="text" name="chat_msg" value="" />                  
</form>

<span class="share_js fc-button fc-button-prev fc-state-default fc-corner-left fc-corner-right">
    <span class="fc-button-inner">
        <span class="fc-button-content save_button">Share</span>
        <span class="fc-button-effect">
            <span></span>
        </span>
    </span>
</span>

当用户单击“共享”按钮时,这很有效,该按钮运行下面的 AJAX:

$(document).ready(function() {

    $('.share_js').click(function(event){
        event.preventDefault();

        var link = $('#chat_form').attr('action');

        $.ajax({
            url: link,
            type: "POST",
            data: $('#chat_form').serialize(),
            dataType: "html",
            beforeSend: function(){
                  $('#loading').show();
                },          
            success: function() {
                $('#chat_thread').load(2 + '/chat_ajax');
                $('#loading').hide();
                $('#chat_form input').val('');
            }
        });
    });

});

我的问题是,当我在键盘上按“return”或“enter”时,表单是通过非 AJAX 方法提交的。

我想用

来捕捉这个击键
$('#selector').keydown(function (e){
    if(e.keyCode == 13){
        //code
    }
})

但无法将其包裹在我的 AJAX 函数中。

理想情况下,点击分享和回车都应该提交表单。

任何人有建议如何做到这一点?

感谢您的帮助!

【问题讨论】:

    标签: jquery ajax submit return


    【解决方案1】:

    为什么不使用表单发布?

    <form action="http://example.com/2/chat_share" method="post" id="chat_form">                    
    <input type="text" name="chat_msg" value="" />                  
    
    <span class="share_js fc-button fc-button-prev fc-state-default fc-corner-left fc-corner-right">
        <span class="fc-button-inner">
            <span class="fc-button-content save_button">Share</span>
            <span class="fc-button-effect">
                <span></span>
            </span>
        </span>
    </span>
    </form>
    

    然后连接表单 POST

    $('#chat_form').bind('submit', function(event) {
    
        var link = $(this).attr('action');
    
        $.ajax({
            url: link,
            type: "POST",
            data: $(this).serialize(),
            dataType: "html",
            beforeSend: function(){
                  $('#loading').show();
                },          
            success: function() {
                $('#chat_thread').load(2 + '/chat_ajax');
                $('#loading').hide();
                $('#chat_form input').val('');
            }
        });
    
        return false; // dont post it automatically
    });
    

    来自cmets

    $('.save_button').bind('click', function(event) {
        getStuff();
        return false; // dont move to top
    });
    $('#chat_form').bind('submit', function(event) {
        getStuff();
        return false; // dont post it automatically
    });
    
    function getStuff() {
    
        var link = $('#chat_form').attr('action');
    
        $.ajax({
            url: link,
            type: "POST",
            data: $('#chat_form').serialize(),
            dataType: "html",
            beforeSend: function(){
                  $('#loading').show();
                },          
            success: function() {
                $('#chat_thread').load(2 + '/chat_ajax');
                $('#loading').hide();
                $('#chat_form input').val('');
            }
        });
    
    }
    

    【讨论】:

    • thx @balexandre 但这会导致 2 个问题 - [1] 我的 shar 按钮被禁用,[2] 当我按 Enter 键时,它仍然是非 AJAX 路由
    • 那么你一定有一个javascript错误阻止submit与该方法挂钩
    • @balexandre - 有没有办法保留点击分享以提交?由于这不是&lt;button&gt;,因此通过删除click 函数将使其处于非活动状态
    • 感谢您的解释。
    【解决方案2】:

    解决方案是针对每种情况使用 2 种不同的方法:一种用于单击 Share,另一种用于按下回车键。

    此代码适用于我,但如果您认为这代表不必要的膨胀或线条,请告诉我 - 否则我稍后会将其标记为最终答案。

    感谢大家的帮助。

    $(document).ready(function() {
    
    
    //this  will run AJAX when clicking on 'Share'
    
    
        $('.share_js').click(function(event){
            event.preventDefault();
    
            var link = $('#chat_form').attr('action');
    
            $.ajax({
                url: link,
                type: "POST",
                data: $('#chat_form').serialize(),
                dataType: "html",
                beforeSend: function(){
                      $('#loading').show();
                    },          
                success: function() {
                    $('#chat_thread').load(<?php echo $id; ?> + '/chat_ajax');
                    $('#loading').hide();
                    $('#chat_form input').val('');
                }
            });
        });
    
    //this  will run AJAX when hitting return / enter
    
        $('#chat_form input').keydown(function (e){
            if(e.keyCode == 13){
        e.preventDefault();
    
            var link = $('#chat_form').attr('action');
    
                $.ajax({
                    url: link,
                    type: "POST",
                    data: $('#chat_form').serialize(),
                    dataType: "html",
                    beforeSend: function(){
                          $('#loading').show();
                        },          
                    success: function() {
                        $('#chat_thread').load(<?php echo $id; ?> + '/chat_ajax');
                        $('#loading').hide();
                        $('#chat_form input').val('');
                    }
                });
            }
        });
    
    });
    

    【讨论】:

      【解决方案3】:

      将您的click 事件更改为submit 事件的形式:

      $(document).ready(function() {
      
      $('#chat_form').submit(function(event){
          event.preventDefault();
      
          var link = $('#chat_form').attr('action');
      
          $.ajax({
              url: link,
              type: "POST",
              data: $('#chat_form').serialize(),
              dataType: "html",
              beforeSend: function(){
                    $('#loading').show();
                  },          
              success: function() {
                  $('#chat_thread').load(2 + '/chat_ajax');
                  $('#loading').hide();
                  $('#chat_form input').val('');
              }
          });
      });
      
      });
      

      对于keydown,您可以这样做:

      $('#selector').keydown(function (e){
          if(e.keyCode == 13){
      e.preventDefault();
      $('#chat_form').trigger('submit');
              //code
          }
      })
      

      【讨论】:

      • 类似于@balexandre 的示例,虽然我没有收到任何错误,但这不允许单击共享按回车的选项
      【解决方案4】:

      您可以捕获表单提交事件:

      $('#chat_form').submit(function(){
          //do stuff
          return false;//prevent default submission.
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 2013-01-03
        • 2014-06-02
        相关资源
        最近更新 更多