【问题标题】:Reasons a variable can be undefined on iPad vs. being defined in my Browser?在 iPad 上未定义变量与在浏览器中定义变量的原因是什么?
【发布时间】:2012-05-27 21:44:13
【问题描述】:

我一无所知。

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

var $currentEntry = $.mobile.urlHistory.stack[$.mobile.urlHistory.activeIndex].url;
    $activePage = $('div:jqmData(url="'+ $currentEntry +'")');

所以我正在获取活动页面的 url 并使用它来构造一个 $activePage 对象。

这在桌面上运行良好,但在我的 iPad (iOS3.3) 上,$currentEntry 定义正确,但 $activePage未定义.

问题:
这可能是什么原因?

您可以排除竞争条件,因为将其包装在 10 秒超时中仍会产生相同的结果。此外,如果我直接控制相应页面并查询它的 data-url,它会显示正确的值。那么为什么上面仍然给我在 iOS 上 undefined

 undefined

同时在其他地方正常工作?

感谢任何提示!

编辑
该元素将是动态的,但我可以直接在我的设置中对页面进行控制台,如下所示:

console.log( $('div:jqmData(wrapper="true").ui-page-active').attr('id') );
console.log( $('div:jqmData(wrapper="true").ui-page-active').attr('data-url') );

都返回正确的iddata-url,所以元素必须存在。

EDIT2
我可以查询属性 data-url 给我正确的值。但是,我不能像这样选择使用这个属性:

$('div[data-url="'+$currentEntry+'"]').length

这给了我0

【问题讨论】:

  • 那么,您要查找的 HTML 元素是否存在?
  • 可能不是问题,但你知道$activePage 是一个全局变量吗?
  • @AndrewWhitaker - 好点!也在检查。
  • 可能是:jqmData(url="...") 选择器在 iPad 上不起作用...
  • @ŠimeVidas - 嗯...我不喜欢这个数据网址。让我们试试 attr()

标签: javascript jquery variables web-applications undefined


【解决方案1】:

我承认我是瞎猜的,但你应该试试:

$activePage = $('div').filter(function(){return $(this).jqmData('url') === $currentEntry})

顺便说一句,我认为“$currentEntry”如果不是 jQuery 对象,则不应该以美元符号开头。

【讨论】:

  • 好的。将尝试不使用“$”和您的建议。到目前为止谢谢!
  • 快速提问。如果我想把它变成一个独立的函数(我需要经常调用它),如果调用该函数并传入相应的 currentPage 作为参数,那会是什么样子?
  • 你可以使用jQuery.fn.filterjm = function(currentEntry){ return this.filter(function(){return $(this).jqmData('url') === currentEntry} } 然后你就像$("div").filterjm(currentEntry)一样使用它
  • 顺便说一句;这工作的原因可能是因为 $currentEntry 包含 jQuery 无法解析为选择器的字符;可能包含引号或其他非法字符;所以我没有使用 jQuery 解析器,而是直接使用 filter 方法; BTW 是 jQuery 内部用来应用非本地选择器(例如 :jqm)
猜你喜欢
  • 1970-01-01
  • 2011-06-11
  • 2021-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多