我有一个功能,用于在标签之间导航,还提交表单。后端验证正如预期的那样工作,但是如果用户提供了无效输入,我设置我的全局变量isValid = false。我现在只验证一个表单,因此使用data.isValid。
我的Jquery代码
var tabID, relatedTabID, isValid=true;
$('#form').on('submit', function (e) {
var formData = $('#form').serialize();
e.preventDefault();
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
type: 'POST',
url: '/roa',
dataType: 'json',
data: {inputs: formData, nextTab: relatedTabID, currentTab: tabID}, //also need to pass in related Tab ID, and also tabID
success: function (data) {
if (data.value===1){
if (data.isValid){//if data is valid, return next view
$('#tabShow').html((data.view));
isValid=true;
}
else{//if it isn't target the div id=erros and replace only error section
isValid=false;
var x=jQuery.parseJSON(data.msg);
var errorString = '';
$.each( x.errors, function( key, value) {
errorString += "<li class='alert alert-danger'>" + value + '</li>';
});
alert(errorString);
$('.something').html(errorString);
return false;//prevent navigation
}
}
else{
$('#tabShow').html((data.view));}
},
error: function () {
alert('error');
}
});
});
$(document).on('hide.bs.tab', '.nav-pills a', function (e) {
tabID = $(e.target).attr('id');
relatedTabID = $(e.relatedTarget).attr('id');
$('#form').submit();
alert(isValid);
if (tabID==='section2'){
return false;
}
});
我的功能$(文件).on(&#39; hide.bs.tab&#39;,&#39; .nav-pills a&#39;,功能(e)无法检测到我的全局变量isValid。我真的不明白这里的问题。
我的后端代码
Route::post('/roa', function() {
$m = Request::except('_token');
$name = "form1_sections/" . $m['nextTab'] . "_form";//next view name
$name2 = "form1_sections/" . $m['currentTab'] . "_form";//current view name
parse_str($m['inputs'], $output);
$type= gettype($output);
if ($m['currentTab']=='section2'){//only validation for section2
$rules = [
'TB1_course.*' => 'required'
];
$validator=Validator::make($output, $rules);
if ($validator->passes()){
return ["view" => view("$name")-> render(), "value"=>1, "type"=>$type, "isValid"=>true];
}
return ["view" => view("$name2")->withErrors($validator) -> render(), "value"=>1, "type"=>$type, "isValid"=>false, "msg"=>json_encode([
'errors' => $validator->errors()->getMessages(),
'code' => 422
])];
}
return ["view" => view("$name") -> render()];
});
即使检测到错误,也应返回false值。如果验证不正确,我想停止导航。一个有趣的事情是isValid返回true,即使我显示错误但在此之后如果我尝试在其他地方导航,它返回false。有什么建议吗?
答案 0 :(得分:0)
离
var Global = {
isValid = true
///put all your Global variable here
}
然后使用Global对象访问它,你的问题可能是js中的范围
Global.isValid = false;