禁用提交按钮问题(与jQuery / AJAX相关)

时间:2012-06-22 05:37:27

标签: jquery ajax submit username

下面的代码(jQuery)最初设计(我不是这段代码的原作者,btw)来检查表单中的所有输入字段,如果有任何空输入则禁用提交按钮:

$(document).ready(function() {
$form = $('#form1'); // cache
$form.find(':input[type="submit"]').prop('disabled', true); // disable submit btn
$form.find(':input').change(function() { // monitor all inputs for changes
    var disable = false;
    $form.find(':input').not('[type="submit"]').each(function(i, el) { // test all inputs for values
        if ($.trim(el.value) === '' || pass <= 1 || name_check === 'no') {
           disable = true; // disable submit if any of them are still blank       
        }
    });
    $form.find(':input[type="submit"]').prop('disabled',disable);
  });
});

需要注意的事项:我的表单名称为'form1',var pass功能正常(密码强度测试的一部分与问题的根目录无关,我相信),var name_check将被解释在下面的代码的其他部分。现在这个小代码可以解决这个问题,如果我没有使用其他代码组合使用jQuery和AJAX来查找我的数据库中是否存在'username'(我的表单的许多输入之一)。检查用户名可用性的代码如下所示(再次,我不是这个的原始作者):

$(document).ready(function()
{
//<!---------------------------------+
//  Below code developed by Roshan Bhattarai 
//  Visit http://roshanbh.com.np for this script and more.
//  This notice MUST stay intact for legal use
// --------------------------------->
$("#username").blur(function()
{
    //remove all the class add the messagebox classes and start fading
       $("#msgbox").removeClass().addClass('messagebox').text('Checking...').fadeIn("slow");
    //check the username exists or not from ajax
    $.post("user_availability.php",{ username:$(this).val() } ,function(data)
    {        
                 $('#username').change(function() {
                    name_check = data;
                 });
      if(data=='no') //if username not available
      {
        $("#msgbox").fadeTo(200,0.1,function() //start fading the messagebox
        { 
          //add message and change the class of the box and start fading
          $(this).html('This User name Already exists').addClass('messageboxerror').fadeTo(900,1);
        });
              $('#form1').find(':input[type="submit"]').prop('disabled', true);
              }
      else
      {
        $("#msgbox").fadeTo(200,0.1,function()  //start fading the messagebox
        { 
          //add message and change the class of the box and start fading
          $(this).html('Username available to register').addClass('messageboxok').fadeTo(900,1);
        });
      }

    });

});
  //<!----- Bhattarai's code ends here

  });

就在那时,所以var name_check保存了'data'字符串yes或no,它取自user_availability.php(这也是完全正常的,与问题无关)。现在我们已经了解了我们正在处理的内容,问题是当我浏览表单(测试它)时,无论用户名是否可用,一旦用户填写了所有输入字段,就会启用提交按钮。密码足够“强大”。似乎var name_check的值没有响应,当用户更改数据即用户名时,代码似乎按原计划运行(如果用户名不可用,则提交按钮被禁用,密码不够强,以及如果用户填写了所有输入字段)。我尝试了一些不同的东西,但我们在这里看到的代码与我得到的代码一样接近。我很确定这只是一件简单的事情,但如果用户在首次运行表单时输入不可用的用户名,我似乎无法使其正常工作。有任何想法吗?感谢您花时间阅读我的问题!

0 个答案:

没有答案