jQuery Mobile分页组件报错:this.removeClass不是函数求助排查
问题与排查方向
错误信息
调试控制台抛出错误:Uncaught: Type error: this.removeClass is not a function,报错位于jQuery Mobile 1.4.5.js第9408行代码this.removeClass( "ui-flipswitch-input" );处。
相关代码
分部视图(cshtml)分页代码
<div id="paging"> <span></span> <span></span> <a data-mini="true" class="action ui-btn" data-bind="css: previousPageEnabled() ? '' : 'ui-disabled'"><<</a> <a data-mini="true" class="action ui-btn" data-bind="css: nextPageEnabled() ? '' : 'ui-disabled'"><<</a> </div>
对应JavaScript代码
(function($, model){ function injectPaging(viewModel, selector, pageSize){ // 分页逻辑代码 } })(jQuery, yourModel);
背景
该分页组件在其他所有实现分页的视图中均正常工作,仅单个视图出现此错误,且不希望修改jQuery源码。
排查方向
- 检查出错视图的jQuery加载情况:确认是否加载了多版本jQuery,或jQuery Mobile在jQuery之前加载——
removeClass是jQuery实例方法,若this未指向jQuery包装对象,大概率是jQuery上下文被破坏。 - 排查视图内的上下文覆盖问题:检查该视图的自定义JS代码,是否在jQuery Mobile处理flipswitch组件时,通过
bind/apply/箭头函数等改变了this的指向,导致其指向原生DOM元素而非jQuery对象。 - 检查视图的DOM结构冲突:确认该视图中是否存在重复ID元素,或有其他脚本篡改了分页组件的DOM结构,导致jQuery Mobile对元素的初始化逻辑异常。
- 验证Knockout绑定的一致性:分页组件使用了Knockout的
css绑定,检查该视图的Knockout版本是否与其他正常视图一致,是否有绑定逻辑导致DOM元素的jQuery包装失效。 - 排查第三方脚本的方法覆盖:检查该视图是否引入了其他自定义脚本,覆盖了jQuery Mobile内部的flipswitch处理方法,导致
this指向错误。 - 确认DOM初始化时机:检查分页组件的初始化是否在DOM完全就绪后执行,若在DOM未加载完成时触发jQuery Mobile的组件渲染,可能导致元素未被正确包装为jQuery对象。
内容的提问来源于stack exchange,提问作者Sumit Roy
相关产品推荐
相关产品推荐

