简体   繁体   English

Jquery 函数在 ios 设备上不起作用

[英]Jquery functions not working on ios devices

I've just put a wordpress site live and noticed a few jquery functions weren't working in safari on iPhone and Ipad (i have yet to test other mobile devices but everything seems to be working on chrome/firefox/IE on desktop).我刚刚上线了一个 wordpress 网站,并注意到一些 jquery 函数在 iPhone 和 Ipad 上的 safari 中无法正常工作(我还没有测试其他移动设备,但一切似乎都可以在桌面上的 chrome/firefox/IE 上运行)。 Here is the site www.sparkyboys.com.au这是网站 www.sparkyboys.com.au

First problem i found was a fade in effect i created wasn't working.我发现的第一个问题是我创建的淡入效果不起作用。 After searching i found that scrollTop was a problem so changed the code to this but it still didnt work.搜索后我发现 scrollTop 是一个问题,因此将代码更改为此,但它仍然不起作用。

var isMobile = false; //initiate as false
if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent)
    || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(navigator.userAgent.substr(0,4))) isMobile = true;


function fadeInUp(fadeElement) {
    var bottom_of_object;
    var bottom_of_window;
    if( isMobile) {
        bottom_of_object = $(fadeElement).offset().top + $(fadeElement).outerHeight() / 2;
        bottom_of_window = $(window).pageYOffset + $(window).height();
    }
    else{
        bottom_of_object = $(fadeElement).offset().top + $(fadeElement).outerHeight() / 2;
        bottom_of_window = $(window).scrollTop() + $(window).height();
    }
        /* If the object is completely visible in the window, fade it it */
        if (bottom_of_window > bottom_of_object) {
            fadeReady = false;
            $(fadeElement).css('margin-top', 0);
            $(fadeElement).css('margin-bottom', 0);
            $(fadeElement).css('opacity', 1);
            $(fadeElement).removeClass('js-fadeInUp');

        }

}

I resigned myself to just admitting defeat and getting rid of fade in effects on smaller screen sizes.我让自己承认失败并摆脱对较小屏幕尺寸的淡入效果。

Next problem I came across was on a service list page (eg www.sparkyboys.com.au/general ).我遇到的下一个问题是在服务列表页面上(例如 www.sparkyboys.com.au/general )。 It seems on the iPhone the dropdowns aren't clickable with the .toggle() jQuery functionality.在 iPhone 上,下拉菜单似乎无法通过 .toggle() jQuery 功能点击。 using the following code.使用以下代码。

function categoryDropDown (dropDownElement) {
    dropDownElement.next('.list-filler').css({'display': 'block'});
    var index = dropDownElement.parent().next('.sublist').index('.sublist');
    dropDownElement.parent().next('.sublist').css({'height': dropdownHeights[index]});
    dropDownElement.children('.dropdown-arrow').children('.fa-angle-down').css({'transform': 'rotate(180deg)'});
}

function categoryLiftUp (dropDownElement) {
    dropDownElement.next('.list-filler').css({'display': 'none'});
    dropDownElement.parent().next('.sublist').css({'height': '0'});
    dropDownElement.children('.dropdown-arrow').children('.js-rotate').css({'transform': 'rotate(0deg)'});
}

$('.js-categoryDropDown').toggle(function() {
        categoryDropDown($(this));
    }, function(){
        categoryLiftUp($(this));
    });

and then finally - (and there's probably more problems i haven't found) - on the booking page there's meant to be a little notice that shows at the top next to 'important - '.然后最后 - (可能还有更多我没有发现的问题) - 在预订页面上有一个小通知,显示在“重要 - ”旁边的顶部。 This notice is dynamically added with jQuery since it has to calculate the amount of time that is shown.此通知是使用 jQuery 动态添加的,因为它必须计算显示的时间量。 I'm using the jquery function .html() to add it, but it doesn't seem to be working.我正在使用 jquery 函数 .html() 添加它,但它似乎不起作用。 This is called from the booking_page.js file once the document has loaded, and that js file is only loaded on the booking page.一旦文档加载完毕,就会从 booking_page.js 文件中调用它,并且该 js 文件仅在预订页面上加载。 ( www.sparkyboys.com.au/booking ) ( www.sparkyboys.com.au/booking )

$('#important-notes').html('Estimated job duration:<div class="job_total_time"> '+total_time.toFixed(2)+' hours.</div>' +  '<br />' +
        'If \'Job Duration\' of less time is selected and the job can\'t be completed in one booking you will be charged for an extra call out fee.');

So i'm wondering if there are workarounds for these problems, or if I'm loading/calling my js files in the wrong way or something on phones.所以我想知道这些问题是否有解决方法,或者我是否以错误的方式加载/调用我的 js 文件或手机上的某些东西。

I did download this https://github.com/artygus/ios-webkit-debug-proxy-win32 and got it running and it says that all the files are being loaded without any errors and the only console warnings i got were about unexpected css tokens from libs I included.我确实下载了这个https://github.com/artygus/ios-webkit-debug-proxy-win32并让它运行,它说所有文件都被加载没有任何错误,我得到的唯一控制台警告是关于意外的我包含的库中的 css 令牌。 It just seems strange to have so many problems with some basic jquery functions.一些基本的 jquery 函数有这么多问题似乎很奇怪。 I'd expect ios/safari to have that functionality.我希望 ios/safari 具有该功能。 I'm pretty new to some of this though so i wouldn't know.我对其中的一些很陌生,所以我不知道。

As a side note the calendar from the booking plugin I'm using also doesn't seem to be loading on iPhone/iPad but i was going to take this up with the developers.附带说明一下,我正在使用的预订插件中的日历似乎也没有加载到 iPhone/iPad 上,但我打算与开发人员讨论这个问题。 It might be a hint as to something bigger going on though since there doesn't seem to be many problems about mobile compatibility listed on their support forums.尽管在他们的支持论坛上列出的移动兼容性问题似乎并不多,但这可能暗示了一些更大的事情正在发生。

OK, I figured it out.好的,我想通了。 Turns out i had safari set to private mode.原来我将 safari 设置为私人模式。 When it's set to that it restricts accessing localstorage for obvious reasons.当它设置为它时,它会出于显而易见的原因限制访问本地存储。 It must also restrict javascript files to an extent which is why a bunch of other functions weren't working.它还必须在一定程度上限制 javascript 文件,这就是为什么一堆其他功能不起作用的原因。 It definitely felt like something bigger than just some syntax errors.这绝对是一种比一些语法错误更重要的东西。 Anyway so if you're getting a load of problems testing something on phone, make sure it's not set to a restricted mode.无论如何,如果您在手机上测试某些东西时遇到很多问题,请确保它没有设置为受限模式。

It may not be your solution, iphone's peculiar(?) regex rule sometimes disturbed javascript.这可能不是您的解决方案, iphone 特有的(?)正则表达式规则有时会干扰 javascript。 In my case, looking ahead expression (?<=A)B raised error on only ios (neither Windows nor Android).就我而言,展望表达式(?<=A)B仅在 ios(Windows 和 Android)上引发错误。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM