我的html模板中有这段代码。它会根据学校在我的数据库中与学校相关联的唯一ID来检查用户输入的学校名称。
$("#id_school").change(function() {
var school = $(this).val();
var identification_code = document.getElementById('id_identification_code')
if (identification_code != '' and school != '') {
$.ajax({
url: '/checks/validate_school/',
data: {
'school': school,
},
dataType: 'json',
success: function(data) {
console.log('Checked School')
if (data.code != identification_code) {
console.log(data.code);
document.getElementById('id_school').style.borderColor = 'red';
document.getElementById('id_identification_code').style.borderColor = 'red';
} else {
document.getElementById('id_school').style.borderColor = 'green';
document.getElementById('id_identification_code').style.borderColor = 'green';
}
}
});
}
});

正如您所看到的,如果数据库中的代码和用户输入的代码不匹配,我希望该框变为红色。当他们这样做时,我希望它变绿。
问题是,一旦我输入学校名称,在输入代码之前,两个框都会变为红色。我尝试用if(identification_code != '' and school != '')
修复此问题,但这没有用。
感谢您的帮助!
答案 0 :(得分:1)
var identification_code = document.getElementById('id_identification_code')
identification_code
这里不是文字而是你的html元素,它永远不会是''
。
你应该在这里使用Logical And运算符(&&):
if(identification_code != '' and school != '')
答案 1 :(得分:1)
你应该使用identification_code.value,因为它是DOM元素。
if(identification_code.value != '' && school != ''){
......
}
答案 2 :(得分:1)
您可以使用jQuery.Deferred()在Jquery中执行顺序执行。
var deferred = jQuery.Deferred();
或
var deferred = $.Deferred();
一旦创建,Deferred对象就会公开几种方法。忽略那些已弃用或已删除的内容,它们是:
always(callbacks [,callbacks,...,callbacks]):添加要在解析或拒绝Deferred对象时调用的处理程序。
done(callbacks [,callbacks,...,callbacks]):添加处理程序 解析Deferred对象时调用。
答案 3 :(得分:0)
好的,所以我设法解决了我的问题。我查看了识别代码字段,而不是查看学校名称字段,只在填写完代码时运行代码。这是我的新代码:
$('#id_identification_code').blur(function(){
var school_code = $(this).val();
var school_name = document.getElementById('id_school').value;
$.ajax(
{
url: '/checks/validate_school/',
data: {
'name':school_name,
},
dataType: 'json',
success: function(data){
if(data.code == school_code){
console.log('Codes Match')
document.getElementById('id_school').style.borderColor='green';
document.getElementById('id_identification_code').style.borderColor='green';
}else{
console.log('Codes do not match')
document.getElementById('id_school').style.borderColor='red';
document.getElementById('id_identification_code').style.borderColor='red';
}
}
}
)
})