返回在功能上不起作用

时间:2011-11-27 14:11:45

标签: javascript jquery

在下面的函数中,如果data = 0或为空,我想返回false,否则返回true - 对于一个输入字段,它会工作。

但是,如果我有两个输入class="myclass_1"且一个输入有值,而其他输入没有值,则无法按预期工作。

当我$('body').delegate('.submit', 'click',...输出为真时,点击表单中的按钮,即使一个字段为空

alert(searchResult)

1 个答案:

答案 0 :(得分:0)

希望我理解你的问题:

你没有确定是否有空输入,当最后一次ajax-call成功时,searchResult将为真(没有返回0)

您可以将ajax-calls的成功存储为每个输入的数据属性,这样您就可以检查所有输入的最后一次ajax调用是否成功:

jQuery(
  function($)
  {

    var search = 
          function(e) 
          {
            e.preventDefault();
            var target=$(e.target);
            if(!target.val() 
                || 
                (target.data('oldValue') && target.data('oldValue')==target.val()
              )
          )
          {
            //return here, no need for a request if 
            // the value hasn't change or is empty
            return;
          }
      target.data('oldValue',target.val());
      //reset data-result for the given input
      target.data('result',0);
    $.ajax({
        type: 'POST',
        url: 'url',
        data: myData,
        async: false,
        success: function(data) {
            if (data == '0') {
                target.data('result',0);
            } else {
                target.data('result',1);
            }
        }
    });
};

$('.myclass_1').live('keyup change', search);

$('body')
  .delegate('.submit', 
            'click', 
            function(e) 
            {
              var inputs=$('.myclass_1'),
                  passed=true,
                  searchResult=(
                                inputs
                                  .length
                                  ===
                                 inputs.filter(function()
                                               {
                                                return($(this).data('result')===1);
                                               })
                                  .length
                               );       

    //searchResult will be false if data-result isn't set to 1 in all inputs
    if (!(searchResult && passed)) { 
        $('#loadingDiv, #overlay').hide();
        return false;
    }
    return true;
});

  }
);