使用了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>
而showHistory的定义放在外部引入的js文件中$(document).ready(function(){
var showHistory = function(flag){
$(this).addClass ("on");
$(this).siblings().removeClass("on");
};
});
结果触发onclick时,说showHistory未定义请教

解决方案 »

  1.   

    使用 var 定义的函数与定义的变量一样,作用域在当前函数内部
    所以你用 var 定义了函数之后,外面并不知道这个函数
    不用 var 的话默认就是全局了
      

  2.   

    谢谢  的确如此 
    请问里面的$(this)用的对吗  
    $(this)有问题
      

  3.   

    $(this) 错了
    在目前的 showHistory 运行上下文内,this 是指 window 对象,因此 $(this) 也就是 jQuery(window),并不是你要处理的对象。
    如果要正确处理,你可以把 this 在调用 showHistory 时传过来。
    即将其定义改为:
    function showHistory(li){
        $(li).addClass ("on").siblings().removeClass("on");
    };
    $(document).ready(function(){
        $('ul>li').click(function(){
            showHistory(this);
        }).first().addClass('on');
    });<ul>
        <li>xxx</li>
        <li>xxx</li>
        <li>xxx</li>
        <li>xxx</li>
    </ul>
      

  4.   

    如何判断得出this是指 window 对象的呢?
    有的this是指带需处理的对象 这里又不是  从哪里可以分辨出来呢