未定義またはnull参照のプロパティ「innerText」を設定できません.

8571 ワード

今日テストの过程の中で、ie环境の下でずっと“未定义あるいはnull引用の属性を设定することができません”valueを报告して、ネット上でも多くの结果を探して、あるのは引用のjqueryバージョンが高すぎるためだと言って、ある方法はプラスします.get(0)ですが、これらの方法はすべて試したことがあります.少なくとも私のプロジェクトでは何の役にも立ちません.コードで説明します.
コードは次のとおりです.

"java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<script type="text/javascript">
function scrollDoor(){
}
scrollDoor.prototype = {
sd : function(menus,divs,openClass,closeClass){
var _this = this;
if(menus.length != divs.length)
{
alert("              !");
return false;
}
for(var i = 0 ; i < menus.length ; i++)
{
_this.$(menus[i]).value = i;
_this.$(menus[i]).onclick = function(){
for(var j = 0 ; j < menus.length ; j++)
{
_this.$(menus[j]).className = closeClass;
_this.$(divs[j]).style.display = "none";
}
_this.$(menus[this.value]).className = openClass;
_this.$(divs[this.value]).style.display = "block";
}
}
},
$ : function(oid){
if(typeof(oid) == "string")
return document.getElementById(oid);
return oid;
},
}
window.onload = function(){
var SDmodel = new scrollDoor();
SDmodel.sd(["m01","m02","m03","m04","m05"],["c01","c02","c03","c04","c05"],"sd01","sd02");
}
script>

以上のコードはネット上でよく使われるscrollDoorプラグインで、cromeやFirefoxでテストしても問題ありませんが、私たちのいたずらなie問題が来て、いろいろなエラーが発生しましたが、エラーは「未定義やnullによる属性を設定できません」です.プラグインが使用できることを十分に証明していますが、ieの問題をどのように解決しますか?
プラグインをよく検討したところ、エラーの原因は、配列["m01","m02","m03","m04","m05"]の属性idの要素が存在しないため、idが「m 01」/「m 02」/「m 03」/「m 04」の要素が見つからないため、属性を設定できないためであることが分かった.問題が見つかったら、解決します.そこで、私はこのプラグインを拡張して、ページにidが特定の値である要素があるかどうかを判断する方法を書きました.もしあれば、実行方法、いいえ、終わります.コードは次のとおりです.

"java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<script type="text/javascript">
function scrollDoor(){
}
scrollDoor.prototype = {
sd : function(menus,divs,openClass,closeClass){
var _this = this;
if(menus.length != divs.length)
{
alert("              !");
return false;
}
for(var i = 0 ; i < menus.length ; i++)
{
    if(_this.exist(menus[i]))   {     
    //    ,            _this
_this.$(menus[i]).value = i;
_this.$(menus[i]).onclick = function(){
for(var j = 0 ; j < menus.length ; j++)
{
_this.$(menus[j]).className = closeClass;
_this.$(divs[j]).style.display = "none";
}
_this.$(menus[this.value]).className = openClass;
_this.$(divs[this.value]).style.display = "block";
}
}
}
},
$ : function(oid){
if(typeof(oid) == "string")
return document.getElementById(oid);
return oid;
},
exist:function(id){    //       id       
    var s=document.getElementById(id);
    if(s){return true}
    else{return false}
   }
}
window.onload = function(){
var SDmodel = new scrollDoor();
SDmodel.sd(["m01","m02","m03","m04","m05"],["c01","c02","c03","c04","c05"],"sd01","sd02");
}
script>

ここまでで、この問題は解決しました.かつて他の情況の下で、この問題にも出会ったことがあって、ただ解決していないで、実はすべて大同小異で、どうしてを見つけて、解決すればいいです.多くの人がコードのvar _this = this;を例に挙げています.
$("#btn").click(function(){
    var _this = this;//  this _this    "#btn"    
    $(".tr").each(function(){
          this;//   this          ".tr"  
          _this;//   "#btn"  
    })
})

この場合、1つのコードセグメントでthisは異なるオブジェクトを表す可能性があり、符号化者は_これは最初のオブジェクトを表します.
さあ、楽しい旅はこれで終わります!