Javascript 为什么变量可以在iPad上未定义,而不是在我的浏览器中定义?
我不懂 在我的Jquery移动插件中,我声明:Javascript 为什么变量可以在iPad上未定义,而不是在我的浏览器中定义?,javascript,jquery,variables,web-applications,undefined,Javascript,Jquery,Variables,Web Applications,Undefined,我不懂 在我的Jquery移动插件中,我声明: var $currentEntry = $.mobile.urlHistory.stack[$.mobile.urlHistory.activeIndex].url; $activePage = $('div:jqmData(url="'+ $currentEntry +'")'); 因此,我获取活动页面的url并使用它来构造$activePage对象 这在桌面上可以正常工作,但在我的iPad(iOS3.3)上,$currentEntry
var $currentEntry = $.mobile.urlHistory.stack[$.mobile.urlHistory.activeIndex].url;
$activePage = $('div:jqmData(url="'+ $currentEntry +'")');
因此,我获取活动页面的url并使用它来构造$activePage对象
这在桌面上可以正常工作,但在我的iPad(iOS3.3)上,$currentEntry定义正确,而$activePage未定义
问题:原因是什么 您可以排除竞态条件,因为在10秒超时内包装它仍然会产生相同的结果。另外,如果我直接控制台相应的页面并查询它的数据url,它会显示正确的值。那么,为什么上面的内容在iOS上仍然没有定义呢
undefined
在其他任何地方都能正常工作
谢谢你的提示
编辑:元素将是动态的,但我可以直接在我的设置中为页面控制台,如下所示:
console.log( $('div:jqmData(wrapper="true").ui-page-active').attr('id') );
console.log( $('div:jqmData(wrapper="true").ui-page-active').attr('data-url') );
两者都返回正确的id和数据url,因此元素必须存在
EDIT2:我可以查询提供正确值的属性数据url。但是,我无法像这样使用此属性进行选择:
$('div[data-url="'+$currentEntry+'"]').length
这给了我0我承认我是瞎猜,但你应该试试:
$activePage = $('div').filter(function(){return $(this).jqmData('url') === $currentEntry})
顺便说一句,就语义而言,如果“$currentEntry”不是jQuery对象,它就不应该以美元符号开头。我承认我是瞎猜,但你应该试试:
$activePage = $('div').filter(function(){return $(this).jqmData('url') === $currentEntry})
顺便说一句,就语义而言,如果“$currentEntry”不是jQuery对象,它就不应该以美元符号开头。那么,您要查找的HTML元素是否存在?可能不是问题所在,但您是否知道
$activePage
是一个全局变量?@AndrewWhitaker-很好!也正在检查。可能是:jqmData(url=“…”)
选择器在iPad上不起作用…@ŠimeVidas-hm。。。无论如何,我不喜欢这个数据url。让我们试试attr()好吧,您要查找的HTML元素存在吗?可能不是问题,但是您知道$activePage
是一个全局变量吗?@AndrewWhitaker-很好!也正在检查。可能是:jqmData(url=“…”)
选择器在iPad上不起作用…@ŠimeVidas-hm。。。无论如何,我不喜欢这个数据url。让我们试试attr()好的。将尝试不使用“$”和您的建议。谢谢你!快速提问。如果我想把它变成一个独立的函数(我需要经常调用它),如果调用函数并将相应的currentPage作为参数传入,那会是什么样子呢?您可以使用jQuery.fn.filterjm=function(currentEntry){return this.filter(function(){return$(this).jqmData('url')==currentEntry}
,然后像使用$(“div”).filterjm(currentEntry)一样使用它
BTW;这可能是因为$currentEntry包含jQuery无法作为选择器解析的字符;可能它包含引号或其他非法字符;因此我不使用jQuery解析器,而是直接使用filter方法;顺便说一句,jQuery内部使用该方法应用非本机选择器(例如:jqm)好的。将尝试不使用“$”和您的建议。谢谢您!快速提问。如果我想将其变成一个独立的函数(我需要经常调用它),如果调用函数并将相应的currentPage作为参数传递,那会是什么样子?您可以使用jQuery.fn.filterjm=function(currentEntry){return this.filter(function(){return$(this).jqmData('url')==currentEntry}}
然后像$(“div”).filterjm(currentEntry)一样使用它
BTW;这可能是因为$currentEntry包含jQuery无法作为选择器解析的字符;可能它包含引号或其他非法字符;因此我不使用jQuery解析器,而是直接使用filter方法;顺便说一句,jQuery内部使用该方法应用非本机选择器(如:jqm)