按钮(禁用=假)条件;在某些情况下有效,在其他情况下无效

Button (disabled = false) conditions; works in some cases and not in others

当我多年只使用条件时,我遇到了一个代码问题,但是当我为类型、名称和位置添加条件时,函数没有产生预期的结果(将按钮状态更改为 禁用=假).

我使用文档事件侦听器来检查用户操作:

document.addEventListener("blur", enableSaveButton());

我有以下代码来检查何时将按钮的禁用值设置为 false 的条件:

function enableSaveButton() {
startyear = document.getElementById('start_year');
endyear = document.getElementById('end_year');
type = document.getElementById('type');
place = document.getElementById('place');
name = document.getElementById('name');
if (!(startyear.className === "form-group has-success")) { return; }; // works
if (!(endyear.className === "form-group has-success")) { return; }; // works
if (!(type.className === "form-group has-success")) { return; };// does not work
if (!(place.className === "form-group has-success")) { return; };// does not work
if (!(name.className === "form-group has-success")) { return; }; // does not work
document.getElementById("savebutton").disabled = false; } // this code works 

startyearendyear都使用相同的函数,validateYear(year, id) (当字段模糊时)用于将表单组状态设置为 "form-group has-success" 或 "form-group has-error".

typenameplace 使用另一个函数,faultyChars (stringen, id) 产生相同的结果。

两者都按目的工作(即使代码可能不是最先进的...)=)

如果我只在 enableSaveButton() 函数中使用 startyearendyear 就可以了完美。但是,如果我添加 typeplacename 错误就会出现,即使它实际上包含相同的代码。对此有什么想法吗?感谢所有帮助!

以下是我提到的功能:

function validateYear(year, id){
console.log("Inne i validateYear");
var x = document.getElementById(id);
if (year === "") {  x.className="form-group has-error"; return false; }
if (isNaN(year)) {  x.className="form-group has-error"; return false; }
if (year.length !== 4) {  x.className="form-group has-error"; return false; }
if ((year.substr(0,2) !== "19") && (year.substr(0,2) !== "20")) { x.className="form-group has-error"; return false; }
else { 
    x.className="form-group has-success";
    enableSaveButton(year);
    return true; }

}

function enableSaveButton() {
startyear = document.getElementById('start_year');
endyear = document.getElementById('end_year');
type = document.getElementById('type');
place = document.getElementById('place');
name = document.getElementById('name');
if (!(startyear.className === "form-group has-success")) { return; };works
if (!(endyear.className === "form-group has-success")) { return; }; // works
if (!(type.className === "form-group has-success")) { return; };// does not work
if (!(place.className === "form-group has-success")) { return; };// does not work
if (!(name.className === "form-group has-success")) { return; }; // does not work
document.getElementById("savebutton").disabled = false; // this code works

}

不知道您看到的错误是什么,这只是一个猜测,但是:很可能文档中没有 ID 为 type 的元素,因此 getElementById() 是返回 null 并尝试引用 type.className 会导致错误。确保 1) 您使用了名称 type 而不是其他名称,2) 您记得向该元素添加了一个 id="type" 属性,并且 3) 没有其他代码从 [=19] 中删除该元素=] 在 enableSaveButton() 运行之前。

我找到了部分答案。问题是您必须返回其中一个年份字段并离开它。然后,当 onblur 启动时,按钮变为活动状态。

所以代码运行正常,问题是它没有像我期望的那样运行。我有很多控制台日志记录要做,但原来的问题不再是。