javascript - javascript中的验证表单,单独点击输入

标签 javascript html css

我对 js 中的验证表单有疑问,你能帮我吗,因为我卡住了。我想单独点击问题输入和标签输入。但是现在,如果我单击标签输入,则会显示来自问题输入的信息(红色背景信息)。我想我的 js 代码有问题。

var validateForm = (function() {

  var options = {};
  var classError = 'error';
  var showFieldValidation = function(input, inputIsValid) {
    if (!inputIsValid) {
      if (!input.parentNode.className || input.parentNode.className.indexOf(options.classError) == -1) {
        input.parentNode.className += ' ' + options.classError
        var d = document.getElementById("de_scri_tit_11")
        d.classList.add("w_te_88")
        $(document).ready(function() {
          $("#de_scri_tit_11").css('display', 'block')

        });
      }
    } else {
      var regError = new RegExp('(\\s|^)' + options.classError + '(\\s|$)');
      input.parentNode.className = input.parentNode.className.replace(regError, '');
      var d = document.getElementById("de_scri_tit_11")
      d.classList.remove("w_te_88")
      $(document).ready(function() {
        $("#de_scri_tit_11").css('display', 'none')

      });
    }
  };

  var testInputText = function(input) {
    var fieldHasError = false;
    var mailReg = new RegExp('^[0-9a-zA-Z_.-]', 'gi');

    if (!mailReg.test(input.value)) {
      showFieldValidation(input, false);
      return false;
    } else {
      showFieldValidation(input, true);
      return true;
    }
  };



  var prepareElements = function() {
    var elements = options.form.getElementsByClassName('til_l67_text');

    [].forEach.call(elements, function(element) {
      element.removeAttribute('required');
      element.className += ' required';

      if (element.nodeName.toUpperCase() == 'INPUT') {
        var type = element.type.toUpperCase();

        if (type == 'TEXT') {
          element.addEventListener('keyup', function() {
            testInputText(element)
          });
          element.addEventListener('blur', function() {
            testInputText(element)
          });
        }

      }

    });
  };

  var prepareElementsTag = function() {
    var elements = options.form.getElementsByClassName('as_tags_in_l67');

    [].forEach.call(elements, function(element) {
      element.removeAttribute('required');
      element.className += ' required';

      if (element.nodeName.toUpperCase() == 'INPUT') {
        var type = element.type.toUpperCase();

        if (type == 'TEXT') {
          element.addEventListener('keyup', function() {
            testInputText(element)
          });
          element.addEventListener('blur', function() {
            testInputText(element)
          });
        }

      }

    });
  };

  var formSubmit = function() {
    options.form.addEventListener('submit', function(e) {
      e.preventDefault();

      var validated = true;
      var elements = options.form.querySelectorAll('.required');

      [].forEach.call(elements, function(element) {
        if (element.nodeName.toUpperCase() == 'INPUT') {
          var type = element.type.toUpperCase()

          if (type == 'TEXT') {
            if (!testInputText(element)) validated = false;
          }

        }
      });

      if (validated) {
        this.submit();
      } else {
        return false;
      }
    });
  };

  var init = function(_options) {

    options = {
      form: _options.form || null,
      classError: _options.classError || 'error'

    }
    if (options.form == null || options.form == undefined || options.form.length == 0) {
      console.warn('validateForm: Źle przekazany formularz');
      return false;
    }
    prepareElements();
    prepareElementsTag()
    formSubmit();
  };

  return {
    init: init
  }
})();

document.addEventListener("DOMContentLoaded", function() {
  var form = document.querySelector('.form');
  validateForm.init({
    form: form
  })
});
#de_scri_tit_11 {
  height: 50px;
  font-size: 14px;
  width: 240px;
  position: absolute;
  left: 350px;
  top: 3px;
  color: #fff;
  font-family: Arial;
  display: none;
  background-color: #DB083E;
  border-radius: 8px;
  padding: 5px;
  border: 3px solid #666;
  font-weight: bold;
}
.w_te_88:before {
  content: 'title should have min 15 characters'
}
#de_scri_tag_11 {
  height: 50px;
  font-size: 14px;
  width: 240px;
  position: absolute;
  left: 860px;
  top: 233px;
  color: #fff;
  font-family: Arial;
  display: none;
  background-color: #DB083E;
  border-radius: 8px;
  padding: 5px;
  border: 3px solid #666;
  font-weight: bold;
}
.w_tg_11:before {
  content: 'Tytuł musi mieć minium 15 znaków i maksimum 100 znaków'
}
.form .error input[type=text] {
  color: #DB083E;
  border-color: #DB083E;
  background: #FFEDED url(img/error.png) right center no-repeat;
  background-position: calc(100% - 10px) center;
  box-shadow: 0 0 2px 2px red;
}
#til_bo_x43 {
  width: 370px;
  height: 40px;
  padding-top: 5px;
  position: absolute;
  top: 20px;
  left: 10px;
}
label.til_l67 {
  font-size: 16px;
  font-family: Arial;
  font-weight: bold;
}
input[type=text].til_l67_text {
  margin-left: 19px;
  width: 203px;
  font-size: 16px;
  font-family: Arial;
  height: 30px;
  border: 1px solid #33b2ff;
  padding-left: 5px;
}
input[type=text].til_l67_text:focus {
  outline-style: none;
}
.as_tags_cho99 {
  width: 325px;
  height: 40px;
  padding-top: 5px;
  position: relative;
  top: 70px;
  left: 75px;
}
label.as_tags_lab_l67 {
  font-size: 16px;
  font-family: Arial;
  font-weight: bold;
}
input[type=text].as_tags_in_l67 {
  margin-left: 19px;
  width: 193px;
  font-size: 16px;
  font-family: Arial;
  height: 30px;
  border: 1px solid #33b2ff;
  padding-left: 5px;
}
input[type=text].as_tags_in_l67:focus {
  outline-style: none;
}
.post_ans_976 {
  position: relative;
  left: 170px;
  top: 100px;
  height: 32px;
  width: 150px;
  font-size: 17px;
  background-color: #ff9c33;
  color: #fff;
  font-family: Arial;
  border: none;
  border-radius: 7px;
  margin-bottom: 200px;
}
.post_ans_976:focus {
  background-color: #ff9c33;
}
.post_ans_976:active {
  background-color: #ff4c00;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form class="form">
  <div class="ask_con_area67">

    <div id="til_bo_x43">
      <label class="til_l67">Tytuł pytania</label>
      <input class="til_l67_text" type="text" placeholder="Question title" autocomplete="off" required />
      <div id="de_scri_tit_11"></div>
    </div>

    <div class="as_tags_cho99">
      <label class="as_tags_lab_l67">Tagi</label>
      <input class="as_tags_in_l67" type="text" placeholder="Question tags" required />
      <div id="de_scri_tag_11"></div>
    </div>
    <button class="post_ans_976">Add question</button>
  </div>
</form>

最佳答案

由于您在模糊事件上添加了验证代码,所以会发生此行为

 element.addEventListener('keyup', function() {testInputText(element)});
 element.addEventListener('blur', function() {testInputText(element)});

将其更改为焦点以获得所需的结果。

element.addEventListener('keyup', function() {testInputText(element)});
element.addEventListener('focus', function() {testInputText(element)});

编辑:根据评论区的讨论

var validateForm = (function() {
	
    var options = {};
    var classError = 'error';
	

	
    var showFieldValidation = function(input, inputIsValid) {
        if (!inputIsValid) {
            if (!input.parentNode.className || input.parentNode.className.indexOf(options.classError)==-1) {
            input.parentNode.className += ' ' + options.classError
			
              
            if(input.classList.contains("til_l67_text"))
            {
               var d = document.getElementById("de_scri_tit_11");
			   d.classList.add("w_te_title")
               $("#de_scri_tit_11").css('display','block')
            }
            else{
            var d = document.getElementById("de_scri_tag_11");
            d.classList.add("w_te_tag");
            $("#de_scri_tag_11").css('display','block')
            }
			
				
						
            }
        } else {
            var regError = new RegExp('(\\s|^)'+options.classError+'(\\s|$)');
            input.parentNode.className = input.parentNode.className.replace(regError, '');
          
            if(input.classList.contains("til_l67_text"))
            {
			    var d = document.getElementById("de_scri_tit_11");
                d.classList.remove("w_te_title");
                $("#de_scri_tit_11").css('display','none');
            }
            else{
                var d = document.getElementById("de_scri_tag_11");
                d.classList.remove("w_te_tag");
                $("#de_scri_tag_11").css('display','none');
            }
              
        }
    };
		
     var testInputText = function(input) {
        var fieldHasError = false;
        var mailReg = new RegExp('^[0-9a-zA-Z_.-]', 'gi');
       
        if (!mailReg.test(input.value)) {
            showFieldValidation(input, false);
            return false;
        } else {
            showFieldValidation(input, true);
            return true;
        }    
    };
	
	
		
    var prepareElements = function() {
        var elements = options.form.getElementsByClassName('til_l67_text');

        [].forEach.call(elements, function(element) {
            element.removeAttribute('required');
            element.className += ' required';

            if (element.nodeName.toUpperCase() == 'INPUT') {
                var type = element.type.toUpperCase();

                if (type == 'TEXT') {
                   
                    element.addEventListener('blur', function() {testInputText(element)});
                }
             
            }
           
        });        
    };
	
	 var prepareElementsTag = function() {
        var elements = options.form.getElementsByClassName('as_tags_in_l67');

        [].forEach.call(elements, function(element) {
            element.removeAttribute('required');
            element.className += ' required';

            if (element.nodeName.toUpperCase() == 'INPUT') {
                var type = element.type.toUpperCase();

                if (type == 'TEXT') {
                  
                    element.addEventListener('blur', function() {testInputText(element)});
                }
             
            }
          
        });        
    };
	
	
	
	
	
	
	
	
	
	
	
	
var formSubmit = function() {
    options.form.addEventListener('submit', function(e) {
        e.preventDefault();
    
        var validated = true;
    
      
        var elements = options.form.querySelectorAll('.required');

        
        [].forEach.call(elements, function(element) {
            if (element.nodeName.toUpperCase() == 'INPUT') {
                var type = element.type.toUpperCase()
                             
                if (type == 'TEXT') {
                    if (!testInputText(element)) validated = false;
                }  
				 
            }
        });
                    
        if (validated) {
            this.submit();
        } else {
            return false;
        }
    });    
};
   	
    var init = function(_options) {
        
        options = {
            form : _options.form || null,
            classError : _options.classError || 'error'
			
        }
        if (options.form == null || options.form == undefined || options.form.length==0) {
            console.warn('validateForm: Źle przekazany formularz');
            return false;
        }
        prepareElements();
		prepareElementsTag()
		formSubmit();
	};

    return {
        init : init
    }
})();

document.addEventListener("DOMContentLoaded", function() {
    var form = document.querySelector('.form');
    validateForm.init({form : form})
});
#de_scri_tit_11
{
	height: 30px;
	font-size:14px;
	width:240px;
	position:absolute;
	left:350px;
	top:3px;
	color:#fff;
	font-family:Arial;
	display:none;
	background-color:#DB083E;
	border-radius:8px;
	padding:5px;
	border:3px solid #666;
	font-weight:bold;
}
.w_te_title:before
{
	content:'Title should have min 15 characters'
}
.w_te_tag:before
{
	content:'Tag should have min 15 characters'
}
#de_scri_tag_11
{
	height: 30px;
    position: relative;
    font-size: 14px;
    width: 240px;
    left: 275px;
    top: -36px;
    color: #fff;
    font-family: Arial;
    display: none;
    background-color: #DB083E;
    border-radius: 8px;
    padding: 5px;
    border: 3px solid #666;
    font-weight: bold;
}
.w_tg_11:before
{
	content:'Tytuł musi mieć minium 15 znaków i maksimum 100 znaków'
}
.form .error input[type=text]{
    color: #DB083E;
    border-color: #DB083E;
    background: #FFEDED url(img/error.png) right center no-repeat;
    background-position: calc(100% - 10px) center;
	box-shadow: 0 0 2px 2px red;	
  }

#til_bo_x43
{
	width:370px;
	height:40px;
	padding-top:5px;
	position:absolute;
	top:20px;
	left:10px;

}
label.til_l67
{
	font-size:16px;
	font-family:Arial;
	font-weight:bold;
}
input[type=text].til_l67_text
{
	margin-left:19px;
	width:203px;
	font-size:16px;
	font-family:Arial;
	height:30px;
	border:1px solid #33b2ff;
	padding-left:5px;
}
input[type=text].til_l67_text:focus
{
	outline-style:none;
}

.as_tags_cho99
{
	width:325px;
	height:40px;
	padding-top:5px;
	position:relative;
	top:70px;
	left:75px;

}
label.as_tags_lab_l67
{
	font-size:16px;
	font-family:Arial;
	font-weight:bold;
}
input[type=text].as_tags_in_l67
{
	margin-left:19px;
	width:193px;
	font-size:16px;
	font-family:Arial;
	height:30px;
	border:1px solid #33b2ff;
	padding-left:5px;
}
input[type=text].as_tags_in_l67:focus
{
	outline-style:none;
}
.post_ans_976
{
	position:relative;
	left:170px;
	top:100px;
	height:32px;
	width:150px;
	font-size:17px;
	background-color:#ff9c33;
	color:#fff;
	font-family:Arial;
	border:none;
	border-radius:7px;
	margin-bottom:200px;
}
.post_ans_976:focus
{
	background-color:#ff9c33;
}
.post_ans_976:active
{
	background-color:#ff4c00;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form class="form">
	<div class="ask_con_area67">
		
		<div id="til_bo_x43">
			<label class="til_l67">Tytuł pytania</label>
			<input class="til_l67_text" type="text" placeholder="Question title" autocomplete="off" required />
			<div id="de_scri_tit_11"></div>
		</div>
				
		<div class="as_tags_cho99">
			<label class="as_tags_lab_l67">Tagi</label>
			<input class="as_tags_in_l67" type="text" placeholder="Question tags" required />
			<div id="de_scri_tag_11"></div>
		</div>
	<button class="post_ans_976">Add question</button>	
	</div>
	
	
	</form>

关于javascript - javascript中的验证表单,单独点击输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41320716/

相关文章:

Javascript - 如何在代码中设置高度时手动降低 Chrome 中的文本区域高度?

javascript - 如何从 Angular JS 调用 JavaScript 方法?

javascript - 在模态面板中显示外部链接

html - CSS/HTML : a tag with a span inside, 跨边距在悬停下划线上创建空白

javascript - 如何根据条件应用样式(JS 函数的返回值)?

javascript - 显示右侧的内容

html - CSS:图像具有 "Fixed"高度、最大宽度并保持纵横比?

javascript - 如何创建可重用的 JavaScript 组件

javascript - 如何在 PHP 联系表单中附加选择列表

javascript - 垂直 Accordion 菜单溢出问题