JQuery Mobile触发器(’create’)命令不起作用
今晚JQuery Mobile正在哭泣。 我正在尝试构建自定义控件,所以我不会通过我的应用程序重复某些元素,这给了我很多时间。 具体来说,我在HTML文件中有以下内容:
在我的主文件中,我基本上是这样做的:
$.get('header.html', function (retData) { $('me-header').html(retData).trigger('create'); });
所以这就是问题 – 标题与我将header.html的内容直接粘贴到我的JQM页面时的呈现方式不同。 它几乎感觉像触发器(’创建’)没有做任何事情。
有任何想法吗? 我已经烧了大约三个小时,像http://jquerymobiledictionary.pl/faq.html这样的教程似乎没有应用..
更改页眉,页脚或内容时,您可以在页面上触发pagecreate
:
$('#me-header').closest(":jqmData(role='page')").trigger('pagecreate');
这是一个jQM错误: https : //github.com/jquery/jquery-mobile/issues/2703 。 根据问题报告中的评论,多次调用pagecreate
可能会导致问题,如https://github.com/jquery/jquery-mobile/issues/2703#issuecomment-4677293中所述 。
我相信我找到了“最好”的答案。 简而言之,“标题”和“页脚”类型的数据角色元素不是标准小部件。 它们是某种混合构造。 我通过浏览JQueryMobile的源代码找到了这个。 它们没有’create’方法,因此无法调用。
我的解决方法是直接将类应用于我的代码,而不是期望小部件为我做。 不理想,但它运作良好。
我发现了触发器(’创建’);
当应用于身体时工作如下:
$('body').append(html).trigger('create');
但我现在遇到的问题是ul列表抛出一个未定义的错误。
这个问题现在已经足够老了,但我刚遇到问题所以这就是我如何处理它 – (这维护了set data-theme并为包含的div和header应用了正确的角色)
$('your_selector').find('div[data-role="header"], div[data-role="footer"]').each( function( ){ var dR = $(this).attr('data-role'); var dT = $(this).attr('data-theme'); $(this).addClass('ui-' + dR + ' ui-bar-' + dT).attr('role', (dR == 'header' ? 'banner' : 'contentinfo') ).children('h1, h2, h3, h4').each( function( ){ $(this).addClass('ui-title').attr({'role':'heading', 'aria-level':'1'}); } ) } );
根据您的代码,将其设置为函数并将选择器作为参数发送可能更方便。 希望能帮助到你。
对我来说, .trigger('create');
如果应用于data-role="page"
的元素,则始终有效
试试这个: $('#test-console').trigger('create');
希望能帮助到你..
$('me-header').html(retData).trigger('create');
应该:
$('me-header').append(retData).trigger('create');
也许试试:
$('#me-header').append(retData).trigger('create');
这不是OP的具体问题的答案,但.trigger(’create’)不起作用的一个原因可能是jQuery Mobile未在当前范围内正确加载,因此不会对触发器做出反应 – 这可能发生例如,在配置不当的RequireJS设置中。
如果它显示未定义的话,检查console.log($ .mobile)并没有什么坏处…
与其他人一样,它让我很难在页面中插入标题。 正如安东尼所说,问题是标题不是“基本”小部件。 jqm执行注入时不会添加类。
我不喜欢用自己的方式添加类ui。
我(疯狂?)的建议是创建一个全新的页面(包括标题),然后提取标题标记,包括jqm添加的所有类ui仪式。 我真的不知道性能影响,但它似乎工作,似乎比手工添加类更可行。
下面是一个例子。 你喜欢?
$( '[data-role=page]' ).on( 'pageinit', function ( event, ui ) { var sHeader = ''; //Create a temporary page to initialize all the ui-class //var sId = core.misc.GUID_new(); var sId = "azerty"; $( '#body' ).append( '' + sHeader + 'content' ); $.mobile.initializePage(); //do not know if needed $( '#' + sId ).page(); //very important to let jqm generate the class ui //console.log( "page():\n" + $( '#' + sId ).html() ); var $myHeader = $( '#tobechanged' ); //console.log( "tobechanged:\n" + $myHeader.html()); //clean the temporary page $( '#' + sId ).empty(); $.mobile.initializePage(); //do not know if needed //replace the id //console.log( "myheader id: ... " + $myHeader.attr( "id" ) ); $myHeader.attr( "id", $( "#" + event.target.id ).attr("id") + "Header" ); //console.log( "myheader id: ... " + $myHeader.attr( "id" ) ); $( "#" + event.target.id ).find( "[data-role=header]" ).replaceWith( $myHeader );
});
呼叫:
trigger('pagecreate');
之后立马:
trigger('create');
适合我。