【问题标题】:function is sending ajax request on page load函数在页面加载时发送 ajax 请求
【发布时间】:2017-08-07 10:37:30
【问题描述】:

我有以下在页面加载时运行的代码。我只想在用户在文本框中完成写入时运行它。

代码是:

$(document).ready(function () {
        $("#user_email").on('change keyup paste', function () {
            $.post('/users/check_email?email=' + $("#user_email").val(), function (data) {
                console.log(data);
            });
        });
    });

文本字段:

<%= f.email_field :email, :type=>"email" %>

我不想在页面加载时运行它,但是当用户在其中输入内容时,它应该执行 ajax 工作。

此外,如果用户写入 1 或 3 个字符,它就会开始发送 ajax。我需要检查电子邮件,以便如何处理这个用例?

更新

重要的问题是我已将电子邮件保存在文本字段中,例如表单中的自动填充信息,因此当页面加载时,它会发送 ajax 请求并开始显示系统中已经存在的 xyz 电子邮件。 我不想在第一次加载页面时发送 ajax 请求,但我想让它在有人写完并在其中写完电子邮件时让它工作。

【问题讨论】:

  • 我已经更新了我的问题,也感谢您的指正;)
  • 没想到自动填充,废话。 :-)
  • @LearningROR:编辑从字面上说与问题本身没有更多相关性。代码应该已经按预期工作,除非在加载 DOM 后还有其他东西以某种方式填充输入。您可以对change 事件的回调添加严格检查,但真正的电子邮件检查应该发生在服务器端而不是客户端(最终两者)。您可能要遵循的过程是: 1) 编写(或者,最好是搜索)电子邮件正则表达式。 2) 获取user_email值,检查长度是否大于3。 3) 两次检查后进行ajax调用。
  • 所以点击完成按钮后发送ajax请求,就像我在回答中所做的那样^^
  • 但是你为什么不想在自动填充上做 ajax 工作呢?如果目标是验证字段的内容,为什么即使自动填充也不验证内容?

标签: javascript jquery ruby-on-rails ajax ruby-on-rails-5.1


【解决方案1】:

试试这个代码:

$(document).ready(function () {
    $("#user_email").on('change keyup paste', function () {
        $.post('/users/check_email', { email: $("#user_email").val()}, 
            function(data){
                 console.log(data);
        }).fail(function(){
              console.log("error");
        });
    });
}); 

【讨论】:

  • 为什么?你改变了什么?你为什么改变它?代码转储不是有用的答案。另请注意,OP 对回调的使用绝对没问题。
【解决方案2】:

检查输入值的长度,检查是否>3,仅发送AJAX请求:

$(document).ready(function() {
  $("#user_email").on('keyup change', function() {
    var enteredValue = $(this).val();
    if (enteredValue.length > 3) {
      $.post('/users/check_email?email=' + enteredValue, function(response) {
        console.log(response);
      });
    }
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id='user_email' type='text' />

【讨论】:

  • 引用的代码不会像 OP 所说的那样做,切换到 focusout 也不会像 OP 所说的那样做。
  • 问题是当用户写完,那不是focusout吗?
  • 可能是这样。可能不是,可能只是在他们停止打字的时候。直到/除非 OP 显示的代码实际上存在他们描述的问题,我们真的无法帮助他们。 (请注意,change 将在用户离开字段时触发,不需要focusout,即使没有任何更改也会触发。)
  • 嗯同意你的看法。抱歉跳到解决方案。等待OP的更多细节。
猜你喜欢
  • 2016-04-14
  • 2012-07-29
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 2011-03-28
  • 1970-01-01
  • 2011-12-06
相关资源
最近更新 更多