【问题标题】:How to call mutiple id using `this` in jquery如何在jquery中使用`this`调用多个id
【发布时间】:2018-05-03 05:33:53
【问题描述】:

我在这里做联系表格。在同一页面中,我有 10 个表格,我想验证所有表格。我想对所有表格使用相同的验证代码。这里我给了 id,但问题是相同的 id不在同一页面上工作。我想使用当前 ID。有人可以建议我该怎么做吗? 随意告诉我的代码中是否有任何错误。 谢谢

$(document).ready(function(){
/* name*/	
	$('#contact_name').on('input', function() {
		var input=$(this);
		var is_name=input.val();
		if(is_name){
			input.removeClass("invalid").addClass("valid");
		}
		else{
			input.removeClass("valid").addClass("invalid");
		}
	});
		
	/* E-mail */	
	$('#contact_email').on('input', function() {
		var input=$(this);
		var regex = /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/;
		var is_email=regex.test(input.val());
		if(is_email){
			input.removeClass("invalid").addClass("valid");
		}
		else{
			input.removeClass("valid").addClass("invalid");
		}
	});
  
  /* select People*/
	$('#contact_select').change(function() {
		var select=$(this);
		var selectOption =  $("#contact_select option:selected").val();
		if(selectOption){
			select.removeClass("invalid").addClass("valid");
		}
		else{
			select.removeClass("valid").addClass("invalid");
		}
	});

	/* select Time*/
	$('#contact_time').change(function() {
		var select=$(this);
		var selectTime =  $("#contact_time option:selected").val();
		if(selectTime){
			select.removeClass("invalid").addClass("valid");
		}
		else{
			select.removeClass("valid").addClass("invalid");
		}
	});

  
  	 /* Submit */
	$("#contact_submit button").click(function(event){

		var form_data = $("#contact").serializeArray();

		 var error_free = true;
		for (var input in form_data){
			var element = $("#contact_"+form_data[input]['name']);
			var valid = element.hasClass("valid");
			var error_element = $("span", element.parent());

			if (!valid){
				error_element.removeClass("error").addClass("error_show"); 
				error_free=false;
			}
			else{
				error_element.removeClass("error_show").addClass("error");
			}
		}

		
	  if (!error_free){
		return false;
		}
		else {		
			$('.success_msg').fadeIn().delay(3000).fadeOut();
			$('input , textarea , select').val('').removeClass('valid');
			event.preventDefault(); 
		}

	});
  

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="row current" id="demo1">
  <form id="contact" method="post" action="">
    <div class="detail">
      <input type="text" id="contact_name" name="name" required autocomplete="off" />
      <span class="inputBar"></span><!--inputBar-->
      <label for="contact_name">Name</label>
      <span class="error">This field is required</span>
    </div><!--detail-->
    <div class="detail">
      <input type="text" id="contact_email" name="email" required autocomplete="off" />
      <span class="inputBar"></span><!--inputBar-->
      <label for="contact_email">Email</label>
      <span class="error">A valid email address is required</span>
    </div><!--detail-->
    	<div class="btn-container" id="contact_submit">
					<a href="#"><button type="submit" class="btn"> Submit</button></a>
			</div>	
  </form>
</div>

<div class="row current" id="demo2">
  <form id="contact" method="post" action="">
    <div class="detail">
      <input type="text" id="contact_name" name="name" required autocomplete="off" />
      <span class="inputBar"></span><!--inputBar-->
      <label for="contact_name">Name</label>
      <span class="error">This field is required</span>
    </div><!--detail-->
    <div class="detail">
      <input type="text" id="contact_email" name="email" required autocomplete="off" />
      <span class="inputBar"></span><!--inputBar-->
      <label for="contact_email">Email</label>
      <span class="error">A valid email address is required</span>
    </div><!--detail-->
    	<div class="btn-container" id="contact_submit">
					<a href="#"><button type="submit" class="btn"> Submit</button></a>
			</div>	
  </form>
</div>

【问题讨论】:

  • ID 必须唯一,必须使用类。
  • @Smit Raval 是的,id 必须是唯一的,但是在 jquery 中,我只想写一次代码。我应该怎么写。
  • 你确定输入作为 on 函数的第一个参数,我认为它应该是事件名称。 $('#contact_name').on('click', function()

标签: javascript jquery html css validation


【解决方案1】:

您似乎使用的是 HTML5,那么添加自定义方法进行验证不是一个好主意。

尝试使用 jquery 验证和模式属性,例如:

        function submitForm(id){
    var isValid = $("#" + id).valid();
     if(isvalid)
    /* Yes valid*/
   else
    /* Invalid*/
      });

HTML

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/jquery.validation/1.16.0/jquery.validate.min.js"></script>

<div class="row current" id="demo1">
  <form id="contact1" method="post" action="">
    <div class="detail">
      <input type="text" id="contact_name" name="name" required autocomplete="off" />
      <span class="inputBar"></span><!--inputBar-->
      <label for="contact_name">Name</label>
      <span class="error">This field is required</span>
    </div><!--detail-->
    <div class="detail">
      <input type="text" id="contact_email" name="email" required pattern="^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$" autocomplete="off" />
      <span class="inputBar"></span><!--inputBar-->
      <label for="contact_email">Email</label>
      <span class="error">A valid email address is required</span>
    </div><!--detail-->
        <div class="btn-container" id="contact_submit">
                    <a href="#"><button type="button" class="btn" onclick="submitForm('contact1')"> Submit</button></a>
            </div>  
  </form>
</div>

<div class="row current" id="demo2">
  <form id="contact2" method="post" action="">
    <div class="detail">
      <input type="text" id="contact_name" name="name" required autocomplete="off" />
      <span class="inputBar"></span><!--inputBar-->
      <label for="contact_name">Name</label>
      <span class="error">This field is required</span>
    </div><!--detail-->
    <div class="detail">
      <input type="text" id="contact_email" name="email" required autocomplete="off" pattern="^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$"/>
      <span class="inputBar"></span><!--inputBar-->
      <label for="contact_email">Email</label>
      <span class="error">A valid email address is required</span>
    </div><!--detail-->
        <div class="btn-container" id="contact_submit">
                    <a href="#"><button type="button" onclick="submitForm('contact2')" class="btn"> Submit</button></a>
            </div>  
  </form>
</div>

更新:

点击按钮时调用的动态函数。类型是按钮而不是提交

希望你能明白这一点,它会有所帮助。

编码愉快!!!!

【讨论】:

  • 在这里你直接有效#contact1 其他表格怎么样,但我希望所有表格都使用相同的代码。
  • 使其动态化并在函数中传递表单名称,在按钮的 HTML onclick 事件中。我已经更新了代码
  • 我是如何尝试的,但没有让默认的 html5 验证正常工作?
  • 你包含验证js了吗?
  • @Deep Shah 不,我不想添加其他库文件。
【解决方案2】:

您可以在 input 控件上使用像 data-validation="validation-type" 这样的自定义属性,然后使用

在表单上为每个属性执行
$('<myform>').find('*[data-validation]').each(function(){
 // in here get the this object for each input control the code to validate comes here
 var valType = $(this).attr('data-validation');
  switch(valType)
  {
    case 1:
     //validation of case 1
     break;
     //add other cases as of your need.
  }     

});

编辑 1

例如,您可以使用这个 sn-p:

var button = $("button")

// handle click and add class
button.on("click", function() {
  //validating controls for form 1
  debugger;
  $('#myform1').find('*[data-validation]').each(function(e) {
    validateInput(this);
  });
  //validating controls for form 2
  $('#myform2').find('*[data-validation]').each(function(e) {
    validateInput(this);
  });
})

function validateInput(control) {
  if (control == null || control === undefined)
    return null;

  var validType = $(control).attr('data-validation');
  if (validType == null || validType === undefined)
    return null;

  switch (validType) {
    case "text":
      if ($(control).val().trim().length == 0)
        $(control).addClass('invalid').removeClass('valid');
      else
        $(control).addClass('valid').removeClass('invalid');
      break;
    case "number":
      debugger;
      var value = $(control).val().trim();
      if (isNaN(value) || value.length == 0)
        $(control).addClass('invalid').removeClass('valid');
      else
        $(control).addClass('valid').removeClass('invalid');
      break;
  }
}
button {
  background: #0084ff;
  border: none;
  border-radius: 5px;
  padding: 8px 14px;
  font-size: 15px;
  color: #fff;
}

.valid {
  border: 2px solid green;
}

.invalid {
  border: 2px solid red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<h4>
  Form 1
</h4>
<form id="myform1">
  <label>Enter name</label>
  <input type="text" data-validation="text" value="">
  <br/>
  <label>Enter Age</label>
  <input type="text" data-validation="number" value="">
  <br/>
</form>
<h4>
  Form 2
</h4>
<form id="myform2">
  <label>Enter name</label>
  <input type="text" data-validation="text" value="">
  <br/>
  <label>Enter Age</label>
  <input type="text" data-validation="number" value="">
  <br/>
</form>
<button>
Click me to validate
</button>

【讨论】:

  • 根据我必须添加的代码。在提交中我们也有相同的 id
  • 是的,您可以将它添加到您的提交中,但如果您为它创建一个函数然后将您的控制器传递给它会更好。
  • @Husna 您遇到的错误是什么,您可以在这里发布。
  • 你确定输入作为 on 函数的第一个参数,我认为它应该是事件名称。 $('#contact_name').on('click', function()
  • @vikscool 你在这里使用 validate.js 吗?我不想使用任何库文件。
猜你喜欢
  • 2012-11-27
  • 2017-02-15
  • 2013-02-23
  • 1970-01-01
  • 2019-08-09
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
  • 2011-07-19
相关资源
最近更新 更多