Javascript 为什么变量可以在iPad上未定义,而不是在我的浏览器中定义?

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

我不懂

在我的Jquery移动插件中,我声明:

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)