【问题标题】:How do you send an ajax request every time that a form input field changes?每次表单输入字段更改时如何发送 ajax 请求?
【发布时间】:2013-05-18 19:06:40
【问题描述】:

例如,有一个输入字段。每次用户在该字段中键入一个键时,它都会发送一个 AJAX 请求,其中包含该输入中当前的任何文本,并对其进行处理。我已经研究了 Jquery 中的 change 和 keyup 函数,但是当我在 Jsfiddle 中尝试它们时,它们什么也没做。是否有执行此类操作的标准方法?我知道它在验证和其他方面很常见。

<form>
    <input id="test" type='text' >
    <input type="submit" value="asdf">
</form>

$('input').on("change",(function(e){
    alert("Hello");
});

我要的效果就像这个游戏www.sporcle.com/games/g/nflteams#

您可以输入任何文本,如果它在正确答案集中,则表格将更新以显示该答案。你永远不必提交。你认为他们是如何达到这种效果的?

在我看来,每次用户输入密钥时他们都必须查询数据库,看看它是否是正确的答案。如果是,他们会更新表格以显示答案。还有什么其他方法可以做到这一点?

【问题讨论】:

  • 你到底尝试了什么?
  • keyup 应该可以工作。代码?
  • 是的,如果您想在服务器上尝试 ajax 调用,那么您尝试了什么,而 jsfiddle 不是 tedt 的最佳位置
  • 我没有尝试 ajax 调用,我只是尝试使用 jquery 事件来查看它是否真的触发了。我会用代码编辑

标签: javascript jquery validation


【解决方案1】:

每次更改都发送请求很糟糕,延迟最后一次更改的 ajax

var changeTimer = false;

$("your inputs").on("your change event",function(){
        if(changeTimer !== false) clearTimeout(changeTimer);
        changeTimer = setTimeout(function(){
            /* your ajax here */
            changeTimer = false;
        },300);
});

【讨论】:

  • 优秀的解决方案。谢谢
  • 另外,看看使用 jquery-debounce 或 underscore 的 debounce 功能。很简单,你不需要添加下划线作为依赖,只需修改一对下划线函数所在的方法。 underscorejs.org/docs/underscore.html#section-83
【解决方案2】:

我可能会做类似的事情。 您必须添加一些额外的代码来处理下拉菜单,但想法是一样的。

$('form input').keyup(function () {
    $.ajax({
      type: "POST",
      url: url,
      data: data,
      success: success,
      dataType: dataType
    });
});

【讨论】:

  • +1 如果它的 keyup,因为这将返回最新的值... keypress() 会留下一个字符。
  • 好电话,ty,我在自己的项目中使用 keyup,只是忘记了 :)
  • @DylanHayes 这不是最好的方法吗?这不会大规模工作吗?如果是这样,验证的更好方法是什么
  • 这取决于你想做什么。使用这种类型的验证我从来没有遇到过问题。自动完成文本框,例如 amazon.com 上的主搜索框,使用相同类型的逻辑来获取它“认为”您尝试输入的内容。如果您想要一次性验证,您可以随时将其缩小以验证“更改”事件,但我从来没有缩小规模。
【解决方案3】:

每次触发更改事件时,只需拨打$.ajax() 电话!像这样:

$(document).on('keydown','input',function(){
    $.ajax({
        // options here
    });
});

虽然上述内容将有助于实现您想要的,但我必须建议,触发持续的 AJAX 请求并不是一个好习惯,因为如果您有很多交通。您最好每隔 n 秒验证一次,或验证客户端,或在提交时验证...

更新

您似乎不想捕捉change 事件,您想知道何时输入了任何内容。结果,我更改了代码以捕获keydown 事件。只要在专注于输入时按下某个键,就会触发此事件。

【讨论】:

  • 我想要的效果就像这个游戏sporcle.com/games/g/nflteams# 您可以输入任何文本,如果它在正确答案集中,那么表格将更新以显示该答案。你永远不必提交。你认为他们是如何达到这种效果的?
  • 你的不满足用户的要求,你的只会在变化时触发。可取与否,它没有回答问题。
  • @DylanHayes 公平点,我已经修改了我的代码来捕捉keydown 事件。
  • 但这里真正的问题是不断的 ajax 调用,+1 指出这一点
【解决方案4】:
$('#yourInputId').keyup (function () {
    $.post('http://yoururl.com', { value: $(this).val() }).done(function (data) {
        $('#feedbackDivId').html(data);
    });
});

【讨论】:

  • 请缩进,.html(done) 会出错,试试 .html(data)
猜你喜欢
  • 2023-03-12
  • 2014-02-22
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 2019-10-06
  • 1970-01-01
  • 2017-05-22
  • 1970-01-01
相关资源
最近更新 更多