用了jqueryhtml:<ul>
    <li class="on" onclick="showHistory(0)">xxx</li>
    <li onclick="showHistory(1)">xxx</li>
    <li onclick="showHistory(2)">xxx</li>
    <li onclick="showHistory(3)">xxx</li>
</ul>
js$(document).ready(function(){ showHistory = function(flag){
$(this).addClass ("on").siblings().removeClass("on"); /* 报错a.parentNode is undefined */
};
});报错a.parentNode is undefined  但是我并没有在li中使用<a> 于是换了一种写法
把onclick去掉 js换成如下:$('ul li').click(function(){
        $(this).addClass("on").siblings().removeClass("on"); 
});这样就OK了。请问两者有什么区别?为啥第一种报错而第二种却成功运行?

解决方案 »

  1.   

    定义时this并不是指运行时的li
    <li class="on" onclick="showHistory(this, 0)">xxx</li>
    <script>
    $(document).ready(function(){
        showHistory = function(obj, flag){
            $(obj).addClass("on").siblings().removeClass("on");
        };
    });
    </script>
      

  2.   

    flag好像是无用变量啊,,而且好像this的定义出现问题了
      

  3.   

    请问下 我的第一个函数中的$(this)是代表什么呢 
    就第一种函数的形式 难道非要在参数里明确传递this吗
      

  4.   

    代表的是document
    不用 实参的话, 就用 闭包在定义时就把参数实例化,显然用实参更简单.
      

  5.   

    第一种写法可以等同于这样。。  现在看清楚this的不同了吧<li class="on">xxx</li>
    <script>
    $(document).ready(function() {
      $('ul li').click(function(){
        showHistory(0, this);
      });  showHistory = function(flag, that){
            $(that).addClass ("on").siblings().removeClass("on"); 
      };
    });</script>
      

  6.   

    楼主把showHistory的定义放到ready函数的外面定义,否则应该是找不到showhistory的
      

  7.   

    找得到的吧  
    没有加var 应该是全局作用域