Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript在验证函数后丢失变量值_Javascript_Jquery - Fatal编程技术网

javascript在验证函数后丢失变量值

javascript在验证函数后丢失变量值,javascript,jquery,Javascript,Jquery,我尝试了几天使这个代码工作,但今天我有了一个想法,要求一些帮助。问题是:当我试图将输入字段的值发送到params变量时,我什么也得不到,一个空值。但是,当我删除验证函数时 $(document).input.hasAttribute('required').each(function () { if ($(this).val() == "") { alert('Please fill all the fields'); } }); 所有参数都在我的url中:?r

我尝试了几天使这个代码工作,但今天我有了一个想法,要求一些帮助。问题是:当我试图将输入字段的值发送到params变量时,我什么也得不到,一个空值。但是,当我删除验证函数时

$(document).input.hasAttribute('required').each(function () {
    if ($(this).val() == "") {
        alert('Please fill all the fields');
    }
});
所有参数都在我的url中:?rpt=123456等等…等等

你知道为什么我在路上丢失了变量值吗?如果是,如何解决

谢谢你的帮助

jQuery(文档).ready(函数(){
jQuery(“vb报告日期”).datepicker({
格式:“dd/mm/yyyy”,
自动隐藏:真
});
jQuery(“vb验证按钮”)。单击(函数(){
检查所需输入(真);
});
});
功能检查所需输入(已提交){
var params=“”;
如果(已提交){
$(文档).input.hasAttribute('required')。每个(函数(){
if($(this).val()==“”){
警报(“请填写所有字段”);
}
});
params=“?rpt=“+jQuery”(“vb报告编号”).val()+”&d=“+jQuery”(“vb报告日期”).val()+”&pin=“+jQuery”(“vb验证pin”).val();
}
window.location.href=“verify reports.php”+参数;
}

要选择文档中所有必需的输入,请使用
$(文档)。查找('input[required]”)

您的函数应该如下所示:

功能检查\u所需\u输入(已提交){
//仅在提交时进行检查
如果(已提交){
//假设输入已填充
var isValid=true;
//检查所需的输入
$(文档).find('input[required]')。每个(函数(){
//缺少输入值
if($(this).val()==“”){
警报(“请填写所有字段”);
isValid=false;
}
});
//如果重定向有效,请执行重定向
如果(有效){
//生成查询字符串
var params=“?rpt=“+$”(“#vb#U报告编号”).val()+”&d=“+$(“#vb#U报告日期”).val()+”&pin=“+$(“#vb#U验证#pin”).val();
//执行重定向
window.location.href=“verify reports.php”+参数;
}
}
}

您可以使用onsubmit方法

<form id="requiredform" class="verify-box" onsubmit="return getdata()" >
    <input type="text" id="vb_report_no" placeholder="Report Number" size="22" data-error="This field is required." class="" required>
    <input type="text" id="vb_report_date" placeholder="Date of Issue" size="12" class="hasDatepicker" data-error="This field is required." required>
    <input type="text" id="vb_verif_pin" placeholder="Verification PIN" size="22">
    <input type="submit" value="Verify" id="vb_verify_button">
</form>

function getdata() {
  check_required_inputs(true);
}
现在函数将是这样的

function check_required_inputs(hasbeenSubmited) {
  var params = "";
  console.log(hasbeenSubmited)
  if (hasbeenSubmited) {
     document.getElementById('requiredform').querySelectorAll("[required]").forEach(function (element) {
       if ($(element).val() == "") {
          alert('Please fill all the fields');
       }
     });
  params = "?rpt=" + jQuery("#vb_report_no").val() + "&d=" + jQuery("#vb_report_date").val() + "&pin=" + jQuery("#vb_verif_pin").val();
  }
 window.location.href = "verify-reports.php" + params;
}

有关详细信息:

检查此处的工作片段。

功能检查\u所需\u输入(已提交){
var params=“”;
console.log(已提交)
如果(已提交){
document.getElementById('requiredform').querySelectorAll(“[required]”)。forEach(函数(元素){
if($(元素).val()=“”){
警报(“请填写所有字段”);
}    	
});
params=“?rpt=“+jQuery”(“vb报告编号”).val()+”&d=“+jQuery”(“vb报告日期”).val()+”&pin=“+jQuery”(“vb验证pin”).val();
}
控制台日志(params);
window.location.href=“verify reports.php”+参数;
}
函数getdata(){
检查所需输入(真);
}


.hasAttribute('required')
将返回一个
布尔值
,您不能对其进行迭代。该代码中一定有语法错误。你检查控制台了吗?谢谢你的回答,伙计!字段上的Required属性不适用于所有safari浏览器,这就是我使用js的原因,如果我只关注其他浏览器,那么问题是:表单在快速显示“此字段为Required”后立即提交。。如果我直接提交,我将不再拥有该url,我需要该url用于下一步。@AnuragSrivastava感谢您的回答。控制台中无错误=/除非您有其他代码/第三方插件,否则代码
$(document).input.hasAttribute
将给出错误:
VM146:1未捕获类型错误:无法读取未定义的属性“hasAttribute”
。然后,您的功能将停止运行,按钮的提交将继续(即表单将提交并重置页面)。您好,谢谢您的回答,尝试过,但不起作用。Url仍然为foreach循环上的emptypass元素变量,您将通过使用$(element).val()获得值。谢谢,但这一新编辑仍然存在相同的问题:一旦填充字段并提交表单,我就没有警报,也没有参数。我只是在url后面有一个问号(没有rpt=&d=&pin=也没有rpt=XXXX&d=XX/XX/XXXX&pin=xxx如果所需字段为空值,则无法提交表单。因此,您将不再收到警报框。对代码进行测试后,我们不会在空字段后自动重定向并获得警报。但重定向仍然没有任何参数,不幸的是,只有一个que。)stion mark:?刚刚尝试过。现在当字段为空时,我收到了警报,但自动重定向到带有空参数rpt=&d=&pin=.的url。但一旦我填充参数,我重定向到没有参数的同一页面,只有一个问号:?应该有验证逻辑来检查输入是否已填充。我已更新了答案,添加一些逻辑来执行重定向,只有在所需输入已填充的情况下才执行。请随意调整以满足您的需要。通过您的新编辑,我进步了很多,现在在警报发出后,我们不再强制执行检查后重定向,因为我们有if语句。谢谢,但不幸的是,重定向不起作用,我们仍然没有任何参数,只是一个问题马克:?你确定
params
格式正确吗?在执行
console.log(params)
而不是重定向时会得到什么?可能ID不正确?是日期(#vb#u report_date)格式正确?另外,出于一致性考虑,我建议在任何地方使用
$
而不是
jQuery
。好的,谢谢你的建议。我尝试按照你的建议用控制台日志替换,但提交后没有出现任何新行。因此没有发生任何事情,但我们有一种重定向,然后将?添加到url,然后我们回到表格上来。
function check_required_inputs(hasbeenSubmited) {
  var params = "";
  console.log(hasbeenSubmited)
  if (hasbeenSubmited) {
     document.getElementById('requiredform').querySelectorAll("[required]").forEach(function (element) {
       if ($(element).val() == "") {
          alert('Please fill all the fields');
       }
     });
  params = "?rpt=" + jQuery("#vb_report_no").val() + "&d=" + jQuery("#vb_report_date").val() + "&pin=" + jQuery("#vb_verif_pin").val();
  }
 window.location.href = "verify-reports.php" + params;