var sign = new Object;sign.signDiv = document.getElementById('signUp');
sign.signUpButton = document.getElementById('signUpButton');
    // sign.signUpButton.onclick = sign.signUp;sign.userName = document.getElementById('userName').value ;
// error:Cannot read property 'value' of null
sign.removeSignDiv = function(){ 
         // remove the sign up div.  
 this.signDiv.parentNode.removeChild( this.signDiv );
 }
sign.signUp = function()
{     // sign up to user.php
     ajax.open( 'GET', 'user.php?name='+ userName , true);
 ajax.onreadystatechange = function(){
     if( ajax.status == 200 && ajax.readyState == 4 ){
     this.removeSignDiv();
 // setInterval("getMessage();" , 5000);
    }
    }
 ajax.send();
}我确定HTML元素id都没有错,chrome却报错. 而且尝试这么调用 sign.signUp(); 也会报错:没有这个方法
我的写法上有什么问题吗?

解决方案 »

  1.   

    这里的this绑定的不是sign..
    sign.signUp = function()
    {     // sign up to user.php
         ajax.open( 'GET', 'user.php?name='+ userName , true);
         ajax.onreadystatechange = function(){
             if( ajax.status == 200 && ajax.readyState == 4 ){
                 this.removeSignDiv();
                 // setInterval("getMessage();" , 5000);
                }
            }
         ajax.send();
    }改成下面,看看sign.signUp = function()
    {     // sign up to user.php
         var that = this;
         ajax.open( 'GET', 'user.php?name='+ userName , true);
         ajax.onreadystatechange = function(){
             if( ajax.status == 200 && ajax.readyState == 4 ){
                 that.removeSignDiv();
                 // setInterval("getMessage();" , 5000);
                }
            }
         ajax.send();
    }
      

  2.   

    找到原因了,脚本放在body前面所以取不到对象。谢谢