请在我的代码中提供帮助,我想在 J Query Mobile 中使用过滤器进行选择 我尝试了下面的代码,它成功过滤了数据,但是当选择一个选项时,它不会返回任何内容并返回此错误
Cannot read property 'jqmData' of undefined
这是我与java脚本一起使用的代码
<form>
<div class="ui-field-contain">
<label for="select-custom-20">Long list:</label>
<select name="select-custom-20" id="select-custom-20" data-native-menu="false" class="filterable-select">
<option value="AL">Alabama</option>
<option value="AK">Alaska</option>
<option value="AZ">Arizona</option>
<option value="AR">Arkansas</option>
<option value="CA">California</option>
</select>
</div>
</form>
这是java脚本
( function( $ ) {
function pageIsSelectmenuDialog( page ) {
var isDialog = false,
id = page && page.attr( "id" );
$( ".filterable-select" ).each( function() {
if ( $( this ).attr( "id" ) + "-dialog" === id ) {
isDialog = true;
return false;
}
});
return isDialog;
}
$.mobile.document
.on( "selectmenucreate", ".filterable-select", function( event ) {
var input,
selectmenu = $( event.target ),
list = $( "#" + selectmenu.attr( "id" ) + "-menu" ),
form = list.jqmData( "filter-form" );
if ( !form ) {
input = $( "<input data-type='search'></input>" );
form = $( "<form></form>" ).append( input );
input.textinput();
list
.before( form )
.jqmData( "filter-form", form ) ;
form.jqmData( "listview", list );
}
selectmenu
.filterable({
input: input,
children: "> option[value]"
})
.on( "filterablefilter", function() {
selectmenu.selectmenu( "refresh" );
});
})
.on( "pagecontainerbeforeshow", function( event, data ) {
var listview, form;
if ( !pageIsSelectmenuDialog( data.toPage ) ) {
return;
}
listview = data.toPage.find( "ul" );
form = listview.jqmData( "filter-form" );
data.toPage.jqmData( "listview", listview );
listview.before( form );
})
.on( "pagecontainerhide", function( event, data ) {
var listview, form;
if ( !pageIsSelectmenuDialog( data.toPage ) ) {
return;
}
listview = data.prevPage.jqmData( "listview" ),
form = listview.jqmData( "filter-form" );
listview.before( form );
});
})( jQuery );
我刚刚使用 jQuery Mobile for Select Widgets 中的示例遇到了这个问题。该错误似乎是特定于版本的。我最初使用的是最新版本的 JQM(在撰写本文时),
https://ajax.googleapis.com/ajax/libs/jquerymobile/1.4.5/jquery.mobile.min.js
如果我将其更改为版本
1.4.2
,错误就会消失。我还没有调查原因,但您可以尝试早期版本,看看是否可以让您的代码以这种方式工作。
编辑:通过更改为较低版本,我失去了使用自动建议功能的能力,所以现在我正在调试以试图找出原始代码有什么问题。
查看
.prevPage
节点,没有 .jqmData
的条目,还不知道为什么。
将 pageIsSelectmenuDialog 函数中的参数从 'data.toPage' 更改为 'data.prevPage':
if ( !pageIsSelectmenuDialog( data.prevPage ) ) {
return;
}
添加输入清理:
form = listview.jqmData( "filter-form" );
$("input", form).val("").trigger("change");
listview.before( form );
替换这条线
listview = data.prevPage.jqmData( "listview" )
用这两行:
listview = data.toPage.find( "ul" );
listview = data.toPage.jqmData( "listview", listview );
它解决了我的问题。我正在使用 jQuery Mobile 1.4.5。