JavaScript只能在第一页上工作

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',

我有3个表单(用于登录、注册和密码恢复),以及以下代码:

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表示认可