如果使用 jquery 输入字段中存在值,如何禁用表单?
How to disable form if value exists in input field using jquery?
我的问题是我正在检查数据库中的输入字段值,如果找到则不应提交表单。但在我的例子中,如果有 3 个输入字段,一个表示已经存在,另一个是正常值。表单被提交。我如何根据在任何输入字段中未发现错误来防止提交表单。
public function check_module($postdata)
{
$module_name = $postdata['module_name'];
$data['select'] = ['*'];
$data['table'] = MODULE;
$data['where'] = ['module_name' => $module_name, 'status !=' => '9'];
$res = $this->selectRecords($data);
if ($res != null) {
$response = 0;
} else {
$response = 1;
}
echo $response;
exit;
}
$(document).on('change', '.module_name', function () {
var that = $(this);
var module_name = $(this).val();
var error = 0;
var base_url = $('#base_url').val();
$.ajax({
url: base_url + 'module/check_module',
type: 'post',
data: {
module_name: module_name
},
success: function (res) {
if (res == 0) {
that.next('span').html('Module already exist');
$('#submit').attr('disabled', 'disabled');
} else {
$('.text-danger').each(function () {
var value = $(this).html();
if (value != "") {
error++;
}
});
if (error == 1) {
$('#submit').removeAttr("disabled");
}
that.next('span').html('');
}
}
});
});
您可以使用一个 global
变量,该变量随每次 ajax 调用而修改。如果 ajax 响应为零,则将 1 添加到全局 errors
变量中,如果一切正常,则添加 0。
要计算数组是否包含 1 和 0 的混合,有多种方法可以做到这一点,但是 Set 看起来非常简洁,可以与 array.reduce
调用结合使用计算数组中所有元素的总和。如果总和为零,则可以提交表格。
let errors=[];
let col=document.querySelectorAll('input[name="module_name"]');
$( document ).on('change', '.module_name', function(){
var that = $(this);
var module_name = $(this).val();
var base_url = $('#base_url').val();
$.ajax({
url: base_url + 'module/check_module',
type: 'post',
data: {
module_name: module_name
},
success: function( res ) {
if( res==0 ) {
that.next('span').html('Module already exist');
$('#submit').attr('disabled', 'disabled' );
}
errors.push( res==0 ); // add either 1 or 0 depending upon result
if(
// 3 elements?
errors.length == col.length
&&
// all the same number?
new Set( errors ).size==1
&&
// sum equals zero
errors.reduce( (a,b)=>a+b )==0
)$('#submit').removeAttr("disabled");
}
});
});
我的问题是我正在检查数据库中的输入字段值,如果找到则不应提交表单。但在我的例子中,如果有 3 个输入字段,一个表示已经存在,另一个是正常值。表单被提交。我如何根据在任何输入字段中未发现错误来防止提交表单。
public function check_module($postdata)
{
$module_name = $postdata['module_name'];
$data['select'] = ['*'];
$data['table'] = MODULE;
$data['where'] = ['module_name' => $module_name, 'status !=' => '9'];
$res = $this->selectRecords($data);
if ($res != null) {
$response = 0;
} else {
$response = 1;
}
echo $response;
exit;
}
$(document).on('change', '.module_name', function () {
var that = $(this);
var module_name = $(this).val();
var error = 0;
var base_url = $('#base_url').val();
$.ajax({
url: base_url + 'module/check_module',
type: 'post',
data: {
module_name: module_name
},
success: function (res) {
if (res == 0) {
that.next('span').html('Module already exist');
$('#submit').attr('disabled', 'disabled');
} else {
$('.text-danger').each(function () {
var value = $(this).html();
if (value != "") {
error++;
}
});
if (error == 1) {
$('#submit').removeAttr("disabled");
}
that.next('span').html('');
}
}
});
});
您可以使用一个 global
变量,该变量随每次 ajax 调用而修改。如果 ajax 响应为零,则将 1 添加到全局 errors
变量中,如果一切正常,则添加 0。
要计算数组是否包含 1 和 0 的混合,有多种方法可以做到这一点,但是 Set 看起来非常简洁,可以与 array.reduce
调用结合使用计算数组中所有元素的总和。如果总和为零,则可以提交表格。
let errors=[];
let col=document.querySelectorAll('input[name="module_name"]');
$( document ).on('change', '.module_name', function(){
var that = $(this);
var module_name = $(this).val();
var base_url = $('#base_url').val();
$.ajax({
url: base_url + 'module/check_module',
type: 'post',
data: {
module_name: module_name
},
success: function( res ) {
if( res==0 ) {
that.next('span').html('Module already exist');
$('#submit').attr('disabled', 'disabled' );
}
errors.push( res==0 ); // add either 1 or 0 depending upon result
if(
// 3 elements?
errors.length == col.length
&&
// all the same number?
new Set( errors ).size==1
&&
// sum equals zero
errors.reduce( (a,b)=>a+b )==0
)$('#submit').removeAttr("disabled");
}
});
});