JavaScript只能在第一页上工作
我有3个表单(用于登录、注册和密码恢复),以及以下代码:JavaScript只能在第一页上工作,javascript,html,dom,Javascript,Html,Dom,我有3个表单(用于登录、注册和密码恢复),以及以下代码: document.addEventListener('DOMContentLoaded', function() { var login = { user: 'afy-usr-log', pass: 'afy-pas-log' }, register = { user: 'afy-usr-reg',
document.addEventListener('DOMContentLoaded', function() {
var
login = {
user: 'afy-usr-log',
pass: 'afy-pas-log'
},
register = {
user: 'afy-usr-reg',
pass: 'afy-pas-reg',
mail: 'afy-eml-reg'
},
forget = {
user: 'afy-usr-psf',
captcha: 'afy-cpt-psf'
},
names = {
login: 'afy-usrlog',
register: 'afy-usrreg',
forget: 'afy-usrpsf'
};
document.querySelector('body').onkeyup = function() {
/* login */
if(document.getElementById(login['user']).value != '' && document.getElementById(login['pass']).value != '') {
document.getElementsByName(names['login'])[0].removeAttribute('disabled');
}
else {
document.getElementsByName(names['login'])[0].setAttribute('disabled', '');
}
/* register */
if(document.getElementById(register['user']).value != '' && document.getElementById(register['pass']).value != '' && document.getElementById(register['mail']).value != '') {
document.getElementsByName(names['register'])[0].removeAttribute('disabled');
}
else {
document.getElementsByName(names['register'])[0].setAttribute('disabled', '');
}
/* forget password */
if(document.getElementById(forget['user']).value != '' && document.getElementById(forget['captcha']).value != '') {
document.getElementsByName(names['forget'])[0].removeAttribute('disabled');
}
else {
document.getElementsByName(names['forget'])[0].setAttribute('disabled', '');
}
}
});
这段代码在我的主页index.php
(只包含注册表单和登录表单)上运行良好,但是如果我将?v=1
(只包含密码恢复表单)添加到地址行,脚本将不再工作。(事实上,如果我用第一个if/else替换最后一个if/else,它可以工作,但是其他的if/else将不工作——第一个if/else和第二个if/else)
我怎样才能解决这个问题
它只包含密码恢复表单
如果它只包含该表单,那么代码将命中第一个getElementById
语句,从中获取null
,然后尝试读取null
的值
这将引发一个异常,该异常应该显示在浏览器开发人员工具的控制台中。(注意:在询问有关代码的问题时,查看控制台并引用错误消息是非常重要的,按照类似的思路,您应该提供一个[MCVE],其中包含足够的HTML来重现问题)
由于您将获得一个异常,JS将中止
您需要从getElementById
获取返回值,然后在尝试使用它之前检查它是否为真值(使用if
)
document.addEventListener('DOMContentLoaded', function() {
var
login = {
user: 'afy-usr-log',
pass: 'afy-pas-log'
},
register = {
user: 'afy-usr-reg',
pass: 'afy-pas-reg',
mail: 'afy-eml-reg'
},
forget = {
user: 'afy-usr-psf',
captcha: 'afy-cpt-psf'
},
names = {
login: 'afy-usrlog',
register: 'afy-usrreg',
forget: 'afy-usrpsf'
};
document.querySelector('body').onkeyup = function() {
//alert("You are in body");
console.log(document.getElementsByName(names));
}
});
尝试按以下方式更改代码:
document.querySelector('body').onkeyup = function() {
/* login */
if(
(null !== document.getElementById(login['user']) &&
'' !== document.getElementById(login['user']).value) &&
(null !== document.getElementById(login['pass']) &&
'' !== document.getElementById(login['pass']).value) {
document.getElementsByName(names['login'])[0].removeAttribute('disabled');
}
else ...
问题不清楚still@VasimVanzara我怎样才能使它在任何其他页面上工作(而不仅仅是在index.php
)?您使用的是核心php吗?根据这些信息,很难说。当脚本不工作时,首先检查脚本是否包含在页面中(右键单击->查看源代码)。然后打开浏览器的JavaScript控制台,看看那里打印了什么错误消息。@VasimVanzara是的,但问题是JS-我的意思是,JavaScript文件在?v=1
或任何其他页面(page1.php
等)上不起作用。如果是我投了反对票,我可能会告诉原因。无论如何,我尝试了alert,它成功了。请检查您是否获得name对象?这意味着您没有dom对象控件此处控件在加载事件时不可用?用+1表示认可