我的条件检查在JS中没有正常工作

时间:2015-06-23 03:25:05

标签: javascript html

我正在尝试在未选中复选框时显示警告消息。我为此目的使用以下代码

function IsEmpty(){
        var oldpath = document.forms['pathuploader'].oldpath.value;
        var newpath = document.forms['pathuploader'].newpath.value;
        var metavalue = !document.forms['pathuploader'].chkmeta.checked;
        var postvalue = !document.forms['pathuploader'].chkpost.checked;
      if((oldpath == "")||((oldpath.substring(0,4))!='http')||((oldpath.substring(0,4))=='Http'))
        {
            alert("Enter a valid URL");
            return false;

        }
        if((newpath == "")||(newpath.substring(0,4)!='http')||(newath.substring(0,4)!='Http'))
        {
            alert("Enter a valid URL");
            return false;

        }
        if((metavalue) && (postvalue))
        {
            alert("Select any category to change");
            return false;
        }
        return true;
}

3 个答案:

答案 0 :(得分:1)

工作JSFiddle

首先,您在下一行中输入错误

if((newpath == "")||(newpath.substring(0,4)!='http')||(newath.substring(0,4)!='Http'))
  

最后一个if是“newath”应该是“newpath”并且相同的区域“!=”应该与oldpath逻辑匹配,而是“==”。

要稍微清理代码,请使用“===”和“!==”而不是“==”,因为这会强制进行更精确的比较。

有关详情use strict mode

,请参阅此链接

这是调整后的代码

另外,如果您希望遵守JS标准,请尝试使用camelCase命名约定。我已将“IsEmpty”函数更正为“isEmpty”作为示例。

function isEmpty(){
   var oldpath = document.forms['pathuploader'].oldpath.value;
   var newpath = document.forms['pathuploader'].newpath.value;
   var metavalue = !document.forms['pathuploader'].chkmeta.checked;
   var postvalue = !document.forms['pathuploader'].chkpost.checked;
  if((oldpath === "")||((oldpath.substring(0,4))!=='http')||((oldpath.substring(0,4))==='Http'))
   {
    alert("Enter a valid old URL");
    return false;

   }
  if((newpath === "")||(newpath.substring(0,4)!=='http')||(newpath.substring(0,4)==='Http')){
    alert("Enter a valid new URL");
    return false;
  }
  if((metavalue) && (postvalue)){
    alert("Select any category to change");
    return false;
  }
  return true;

}

更新我也同意BANG(!)所应的“Sourabh”。如在

if(( !metavalue ) && ( !postvalue ){ 

而不是目前的情况。两者都有效,但BANG隐藏在变量中。如果你确实保持原样,也许你可以通过调用它来提醒可能查看你代码的下一个程序员

var metaValueNotChecked = !document.forms...
var postValueNotChecked = !document.forms...

然后它将正确读作

if(( metaValueNotChecked ) && ( postValueNotChecked ){ 

在这种情况下,BANG应该是你拥有它的地方。

希望这有帮助!

答案 1 :(得分:0)

使用以下程序更好的方法来做到这一点,我假设你在表单中定义了元素,你需要更改这两部分代码

第一

var metavalue = document.forms['pathuploader'].chkmeta.checked;
var postvalue = document.forms['pathuploader'].chkpost.checked;

然后在if条件下使用以下程序:

if(!metavalue && !postvalue)
        {
            alert("Select any category to change");
            return false;
        }

答案 2 :(得分:0)

您可以使用HTML5中的“必需”,并在选中复选框后将其从复选框的每个其他位置删除。例如:

<input required="required" value="1" name="site[source][]" id="site_source_any" type="checkbox">

<input required="required" value="2" name="site[source][]" id="site_source_many" type="checkbox">

在您的脚本文件中:

<script type="text/javascript">
        // Check if atleast one of the checkbox is checked
        $(function(){
          var requiredCheckboxes = $(':checkbox[required]');
          requiredCheckboxes.change(function(){
          if(requiredCheckboxes.is(':checked')) {
        // Remove Required once at-least one is checked
          requiredCheckboxes.removeAttr('required');
          }
          else {
            requiredCheckboxes.attr('required', 'required');
           }
         });
       });

        </script>