Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery:keyup上的输入值丢失了吗?_Jquery - Fatal编程技术网

jQuery:keyup上的输入值丢失了吗?

jQuery:keyup上的输入值丢失了吗?,jquery,Jquery,我有一个简单的表单,当用户在输入字段上按enter(return)时,我想提交它(即激发ajax)。如果我按下submit按钮,事件将正常触发,但当使用keyup触发完全相同的函数时,输入字段的值为空。我尝试使用$(this.val())传递输入字段的值(来自keyup函数),但传递的参数仍然为空 更新II:问题仅在初始加载时出现。点击“刷新”按钮后,事件将按预期触发。在铬和FF中测试 试试这个: $(document).ready(function(){ // make sure DOM i

我有一个简单的表单,当用户在输入字段上按enter(return)时,我想提交它(即激发ajax)。如果我按下submit按钮,事件将正常触发,但当使用keyup触发完全相同的函数时,输入字段的值为空。我尝试使用$(this.val())传递输入字段的值(来自keyup函数),但传递的参数仍然为空

更新II:问题仅在初始加载时出现。点击“刷新”按钮后,事件将按预期触发。在铬和FF中测试

试试这个:

$(document).ready(function(){ // make sure DOM is ready to be manipulated
  // ...

    $('#pin').keyup(function(e) {
        if (e.which == 13) {
            getKeyAjax();
            e.preventDefault() // prevents form from being submitted
        }
    });

  // ...
})

我在你的小提琴上注意到了一件可能是导致这一切的事情。在使用表单字段时,我注意到有时我会收到一个通知,说明“仅限4位数字”,而通常我不会。这里的问题是您的
表单
标签。按enter键会触发浏览器的默认行为:非ajax表单提交。如果在运行
$.GET
之前执行此操作,则它将与您描述的行为一致,刷新后js将被缓存,然后可能会更快地进行计算,允许在提交和刷新之前执行$.GET。这只是一个理论,但最终留给你两个选择:

  • 从html中删除
    标记
  • $('form').on('submit',函数(e){e.preventDefault();})
  • 1#将具有无默认提交的效果,因为没有
    可以这样做。2#覆盖
    onsubmit
    事件以防止默认提交(允许保留表单标记)

    无论这是否解决了您要解决的问题,您的脚本都需要它。它将是在表单中输入时执行ajax的关键


    在上面拉小提琴。行为现在是一致的。

    这里似乎运作良好,对吗?()我忘了提到它确实有效,但只是有时(大多数情况下,不是)。这反过来又使得找出问题所在变得更加困难。到目前为止,我只在Chrome和FF中进行了测试。嗯,你能用你的HTML和JS在jsfiddle.net上设置一个提琴吗?@KGChristensen我很确定你没有将你的jQuery代码包装在
    $(document.ready()
    )中。它在doc.ready中-请参阅下面的注释以回答。@KGChristensen你是否使用
    $(document.ready()
    ,在DOM准备好被操作之后?我已经尝试了这两种方法(只是为了见鬼),现在它驻留在doc.ready中。小更新:它现在似乎在Chrome中工作(在添加Raminson的建议和强制清理Tomcat之后…)。Firefox中没有运气。非常好-非常好的回复和解释。我同意建议2,现在可以在所有目标浏览器上使用。
    $(document).ready(function(){ // make sure DOM is ready to be manipulated
      // ...
    
        $('#pin').keyup(function(e) {
            if (e.which == 13) {
                getKeyAjax();
                e.preventDefault() // prevents form from being submitted
            }
        });
    
      // ...
    })