基于输入字段的使用次数发生多个ajax请求

时间:2011-11-08 16:53:14

标签: javascript jquery ajax

我有一个奇怪的错误,我正在从输入执行ajax加载。我意识到这可能是一种愚蠢的方式,但这是我发现让IE配合使用回车键的唯一方法。然后我有一个单独的问题,IE中的提交继续打开一个新窗口,而不是只使用Ajax GET。所以..我完全抛弃了表格,我正在尝试用javascript做所有事情......这样的事情:

<input class="myInput" type="text"></input>
<img src="submitbutton" class="submitIt" />

我正在启动ajax函数:

$('.submitbutton').click{function() { ajaxFunction(); });

工作正常。

以及当用户点击输入时:

$('.myInput').keydown(function(e){
if (e.keyCode == 13) {
ajaxFunction();
return false;
}

适用于第一个条目。但是,如果你输入第二个数字,它会使ajax请求2次,第三个数字=现在同时发生3个ajax请求到同一个地方,无限期...

我很确定问题是我设置验证的古怪方式。 keydown函数在这样的else {}语句中,并且在输入中恰好有9个数字之后才会起作用..这里是其中的一部分:

    if ( len !== 9 )
        {
            if ( len == 1 )
            { y.hide(); n.show(); valInput.text("You need 8 more numbers");
            } 
            else                            
                {
                if ( len == 2 )
                { y.hide(); n.show(); valInput.text("You need 7 more numbers");
            }
            ...
         } 
     else {
    $('.myInput').keydown(function(e){
    if (e.keyCode == 13) {
    ajaxFunction();
    return false;
    }

}

抱歉,我没有可访问的实时代码,我需要一段时间来设置一个,但如果需要的话,我会这样做。

1 个答案:

答案 0 :(得分:0)

  

我有一个奇怪的错误,我正在从输入执行ajax加载。我意识到这可能是一种愚蠢的方式,但这是我发现让IE配合使用回车键的唯一方法

可能是您正在使用的IE版本。但点击回车键会触发提交。

  

然后我有一个单独的问题,IE中的提交继续打开一个新窗口,而不是仅仅使用Ajax GET。所以..我完全抛弃了表格,我正在尝试用javascript做所有事情......这样的事情:

你真的需要找出为什么会这样,而不是试图写黑客。它既是游戏的一部分,也是学习过程的一部分,也是实现它的方式。

为什么不使用.submit()和'普通'提交按钮,如:

<form action="#">
    <input type="text" name="myInput">
    <input type="image" src="submitbutton" class="submitIt">
</form>    

$(function() {
    // use this instead of clicking on submit or enter key pressed
    $('form').submit(function() {
        // get character count of input
        var char_count = $('input[name="myInput"]', this).val();

        // validate it
        if (char_count != 9) {
          // still need to initialize y, n and valInput
          y.hide();
          n.show();

          // watch out this may give negative numbers
          // this will take care if the error to be displayed. way better than using lots of ifs :)
          valInput.text('You need '+parseInt(9-char_count, 0)+' more characters');

          return false;
        }

        // can be uncommented if you still want to use AJAX to submit your form, but really it is not needed.
        //ajaxFunction();
        //return false;
    });
});