不明白为什么这个javascript赢了';我不在jQm工作
在我看来,这应该是可行的(基于对SM上其他问题的回答),但我没有得到任何结果 这是我在页面头部的代码: 第二次编辑:不明白为什么这个javascript赢了';我不在jQm工作,javascript,jquery-mobile,Javascript,Jquery Mobile,在我看来,这应该是可行的(基于对SM上其他问题的回答),但我没有得到任何结果 这是我在页面头部的代码: 第二次编辑: <script type="text/javascript"> function capitalizeFirstLetter(string){ return string.charAt(0).toUpperCase() + string.slice(1); } $(document).del
<script type="text/javascript">
function capitalizeFirstLetter(string){
return string.charAt(0).toUpperCase() + string.slice(1);
}
$(document).delegate('#sun, #mon, #tue, #wed, #thu, #fri, #sat', 'pageshow' , function() {
var days = ['sun','mon','tue','wed','thu','fri','sat'],
output = [],//create an output buffering variable
d = new Date();
for(var x=0; x<days.length; x++){
//rather than manipulate the DOM every iteration of the loop we add a string of HTML to an array
output.push('<li><a href="#' + days[x] + '">' + capitalizeFirstLetter(days[x]) + '</a></li>');
}
//now we add the buffered data to the listview and either refresh or initialize the widget
var $cNav = $('#custom-navbar')
$cNav.append(output.join(''));
//if the listview has the `ui-listview` class then it's been initialized, and the widget needs to be refreshed, otherwise it needs to be initialized
if ($cNav.hasClass('ui-navbar')) {
$cNav.navbar('refresh');
} else {
$cNav.navbar();
}
});
</script>
函数首字母大写(字符串){
返回string.charAt(0.toUpperCase()+string.slice(1);
}
$(文档).delegate(“#sun,#mon,#tue,#wed,#thu,#fri,#sat,#pageshow”,function(){
变量天数=['sun'、'mon'、'tue'、'wed'、'thu'、'fri'、'sat'],
output=[],//创建输出缓冲变量
d=新日期();
对于(var x=0;x我猜“pageshow”事件属于jquery mobile framework。如果我是对的,那么您应该在脚本之前添加jquery mobile脚本标记。好吧,从jquery mobile网站上,他们直接建议不要绑定到$(document).ready()由于他们在幕后使用了一些ajax魔术,因此建议执行与您正在做的类似的操作,但使用pageinit而不是pageshow。从我在文档中看到的情况来看,他们在功能上应该是等效的。加载jqm后,您是否尝试过绑定pageshow或pageinit
重要提示:使用pageInit(),而不是$(document).ready()
在jQuery中学习的第一件事是调用
$(document).ready()函数,以便在
DOM已加载。但是,在jQuery Mobile中,Ajax用于加载
导航时,将每个页面的内容导入DOM,并准备好DOM
处理程序仅对第一页执行。每当
加载并创建新页面后,可以绑定到pageinit事件。
本页底部详细解释了此事件
你看到了吗?你有一个额外的,{
,并且缺少一些语法来说明这一点。你在应该使用冒号的地方也使用了等号(因为你正在设置对象的属性):
$('ul#自定义导航栏')。附加(
$(“”)。追加(“”{
'href':“#”+天[x],
“数据ajax”:“false”,
“文本”:天[x]
})
);
这将创建一个列表项,然后向其附加一个链接,并设置一些属性
请注意,您可以复制我的代码,将它粘贴到您的代码上(在您的文档中),它会很好地工作
一般来说,你应该学会使用你的控制台,它会给你带来惊人的帮助。例如,我在大约30秒内发现了你页面上的错误…我们首先使用它
$('ul#custom navbar')。listview();
不$('ul#custom navbar')。listview('refresh');
如果元素未初始化,则此操作无效
但是如果您在ul上添加了html attr data role=“listview”,on-pageshow jQM将自动初始化listview,如果是这样,然后您向它添加了元素,那么您将需要运行$('ul#custom navbar')。listview('refresh');
我建议您改为这样做
另外您需要将$('ul#custom navbar').listview()
放在live函数中,就像其他人提到的那样,调用jQM时不会加载它,您应该使用pageinit事件,当您导航回页面时也会触发pageshow(通过后退按钮等),您不想两次初始化它。仔细阅读这两个,最好使用这两个来干净地处理JS
PS:我很高兴您正确地侦听了pageinit/pageshow事件,并且没有使用document.ready,我还建议在mobileinit处理程序中启动这些侦听器,例如。
$(document).bind(“mobileinit”,function(){//your pageinit/pageshow listeners here
以及.live
函数现在已被弃用,请使用$(document).在('pageinit pageshow',div:jqmData(role=“page”),div:jqmData(role=“dialog”)'上,function(oEvent){
/p>修订版:.live()
确实有效,但.listview()
没有,所以我的原始评论仍然成立:如果人们遵循,他们会注意到:“当使用jQuery读取或操作文档对象模型(DOM)时,我们几乎做的每件事都是这样的,我们需要确保在DOM准备好后立即开始添加事件等。为此,我们为文档注册一个就绪事件。”(举个例子)。@FelixKling我可以想象.listview()
是jquery移动库的一部分……它位于添加library@ManseUK:你是对的。你仍然需要将调用放入就绪处理程序中。然后顺序就不再重要了(正如.listview
在加载DOM时执行,即加载所有脚本)。但我同意按依赖顺序包含它们更有意义。@ManseUK,我已尝试将脚本四处移动(并在您的注释后重试),但没有用。我的代码仍然没有呈现。我甚至没有收到不重要的警报。你甚至可以用jQuery定义自己的事件,它们不必“存在”。例如,我可以说$('#foo')。bind('bar',…)
bar
不是一个已定义的事件。尽管如此,只要我调用$('#foo'),事件处理程序都会执行.trigger('bar'))
@JustinWhite是否有相关页面的链接?@JustinWhite查看“我的答案”的更新。您发生了一个解析错误,但只需将“我的代码”粘贴到现有代码上即可修复该错误。@JustinWhite如果您观看控制台,所有JS错误都会显示出来,并且每个错误都会给您一个行号。您可以使用multiple只需用逗号将选择器删除即可:$(“#sun,#mon,#tue,#wed,#thu,#fri,#sat”)…
。好的,我用当前代码更新了我的帖子。我有导航
<div data-role="content">
<div data-role="navbar" style="margin: -10px 0 15px 0;">
<ul id="custom-navbar"></ul>
</div>
<script src="http://code.jquery.com/jquery-1.6.4.min.js"></script>
<script type="text/javascript">
$(document).delegate('#sun', 'pageshow' , function() {
alert("!");
var days = ['sun','mon','tue','wed','thu','fri','fri','sat'],
output = [];//create an output buffering variable
for(var x=0; x<days.length; x++){
alert(days[x]);
//rather than manipulate the DOM every iteration of the loop we add a string of HTML to an array
output.push('<li><a data-ajax="false" href="#' + days[x] + '">' + days[x] + '</a></li>');
}
//now we add the buffered data to the listview and either refresh or initialize the widget
var $cNav = $('#custom-navbar')
$cNav.append(output.join(''));
//if the listview has the `ui-listview` class then it's been initialized, and the widget needs to be refreshed, otherwise it needs to be initialized
if ($cNav.hasClass('ui-listview')) {
$cNav.listview('refresh');
} else {
$cNav.listview();
}
});
</script>
<script src="../js/jquery.mobile-1.0.1.js"></script>
$('ul#custom-navbar').append('<li/>', {
.append('<a/>', {
'href' = "#" + days[x],
'data-ajax' = "false",
'text' = days[x]
});
});
$('ul#custom-navbar').append(
$('<li/>').append('<a/>', {
'href' : "#" + days[x],
'data-ajax' : "false",
'text' : days[x]
})
);