2014-10-20 88 views
0

我有一个隐藏输入的简单表单,我试图检查每个隐藏的输入是否有一个值。如果所有隐藏的输入都有一个值,而不是禁用或启用提交按钮。一旦用户通过jquery点击图像,输入就会被填充。香港专业教育学院尝试多种方式,它看起来像我想的东西....禁用提交按钮,直到所有隐藏的输入有一个值

<form method="post" action="test.php"> 
    <div class="selections" id="accordion"> 
     <h3>title<div class='status'>Pending</div></h3> 
     <div class='select-form'> 
      <div class='images'> 
       <img src='images/vote.jpg' data-value='data-value'> 
       <br/><span>title</span><br/>description 
      </div> 
      <input type='hidden' class='image-value' name='1' value=''> 
     </div> 
     <div class='select-form'> 
      <div class='images'> 
       <img src='images/vote.jpg' data-value='data-value2'> 
       <br/><span>title</span><br/>description 
      </div> 
      <input type='hidden' class='image-value2' name='2' value=''> 
     </div> 
    </div> 
    <input id="submit_button" type="submit" class="submit" value="SUBMIT"> 
</form> 

的JavaScript去如下:

$(document).ready(function() { 
    var $submit = $("input[type=submit]"), 
     $inputs = $('input[type=hidden]'); 

    function checkEmpty() { 

     // filter over the empty inputs 

     return $inputs.filter(function() { 
      return !$.trim(this.value); 
     }).length === 0; 
    } 

    $inputs.on('blur', function() { 
     $submit.prop("disabled", !checkEmpty()); 
    }).blur(); // trigger an initial blur 


}); 

什么想法?

+0

尝试调试过滤器的长度和检查什么它给你 – 2014-10-20 18:33:33

+2

此外,我认为最终的HTML将我们比PHP更好 – 2014-10-20 18:34:07

+0

由于您使用的是PHP,在循环遍历类别后设置禁用提交会比在隐藏字段上使用jquery blur更加容易,这种方式无法工作。同样在你的PHP中,你没有为任何隐藏的输入设置值。如果它们总是空的,它将如何工作? – 2014-10-20 18:37:26

回答

0

你可以只调用checkEmpty()img.click(),并从该函数处理禁用状态。

尝试一下这里:JSFiddle(点击图片)

$(document).ready(function() { 
    var $submit = $("input[type=submit]"), 
     $inputs = $('input[type=hidden]'); 

    function checkEmpty() { 
     var res = true; 
     $inputs.each(function(i,v){ 
      if(v.value == ""){ 
       res = false; 
       return false; 
      } 
     }); 

     $submit.prop("disabled", !res);  
    } 

    $("img").click(function(){ 
     $(this).parent().parent().find("input[type=hidden]").val("sdf"); 
     checkEmpty(); 
    }); 

    checkEmpty(); //set disabled onload 
}); 
+0

工作!谢谢! – lancey 2014-10-20 19:33:56

0

,你接受你的装饰功能不正常,请删除它像here :

function checkEmpty() { 
    // filter over the empty inputs 
    return inputs.filter(function() { 
     return !(this.value); 
    }).length === 0; 
} 
0

将这个模糊函数内,以找出是否所有隐藏的投入有一个非空值。

var empty=false; 
$('input[type=hidden]').each(function(){ 
if($(this).val()==""){ 
empty=true; 
} 
}); 
if(empty){ 
//DISABLE SUBMIT 
} 
-1

当您不应该使用JavaScript变量时,您正在使用$。工作小提琴:http://jsfiddle.net/keliix06/2f3cv2pk/

$(document).ready(function() { 
    var submit = $("input[type=submit]"), 
     inputs = $('input[type=hidden]'); 

    function checkEmpty() { 

     // filter over the empty inputs 

     return inputs.filter(function() { 
      return !$.trim(this.value); 
     }).length === 0; 
    } 

    inputs.on('blur', function() { 
     submit.prop("disabled", !checkEmpty()); 
    }).blur(); // trigger an initial blur 


}); 
+0

允许JavaScript变量以$开头,通常用于区分存储的jQuery对象和其他变量。 – 2014-10-20 19:14:24

相关问题