jQuery-1.10.2.js使用.hasClass产生错误

时间:2014-09-03 20:20:51

标签: jquery jquery-mobile

我正在使用jQuery Mobile:

<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.2.min.js">
<script type="text/javascript" src="http://code.jquery.com/mobile/1.4.2/jquery.mobile-1.4.2.min.js"> 

当我使用属性'data-ajax =“false”'的链接时,如果标题可见,我想通过调用以下函数向下滚动标题的高度,该函数使用jQuery执行关键测试.hasClass方法:

  function utHeaderScroll() {
    var h = $('body').pagecontainer(_getActivePage).children('header')[0];
    var y = h.hasClass('ui-fixed-hidden');
    if (y) jQuery.mobile.silentScroll(_0 - h.prop(_scrollHeight));
  }

第一行成功返回当前页面的标题元素,如此范围变量的Chrome源显示中所示:

h: header.ui-header.ui-bar-inherit.ui-header-fixed.slidedown
....

但是,我从未进入滚动操作,因为当函数进入第二行时,会立即引发Uncaught TypeError: undefined is not a function,调试器会在jquery-1.10.2.js中显示以下代码:< / p>

if ( !(eventHandle = elemData.handle) ) {
    eventHandle = elemData.handle = function( e ) {
        // Discard the second event of a jQuery.event.trigger() and
        // when an event is called after a page has unloaded
        return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?
            jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
        undefined;
    };
    // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events
    eventHandle.elem = elem;
}

第二行("eventHandle = elemData.handle = function( e )")突出显示。

添加了y变量以更好地隔离问题。最初,hasClass方法在if子句中执行,结果相同。

我确信这个问题有一个简单的解决方案,但我在两天的探索中找不到它。

1 个答案:

答案 0 :(得分:1)

通过在[0]末尾使用$('body').pagecontainer(_getActivePage).children('header')[0],您将收回本机DOM对象而不是jQuery对象。看来你想要包含所有匹配元素的数组中的第一个匹配元素。在这种情况下,请尝试以下方法之一:

试试这个:

$('body').pagecontainer(_getActivePage).children('header:first')

$('body').pagecontainer(_getActivePage).children('header').first()

请记住,jQuery对象是本机DOM对象的 超集 。也就是说,jQuery包含所有本机DOM对象方法和 其他 jQuery特定方法。