Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery hide()方法在tablet/mobile上不起作用_Javascript_Jquery_Ipad_Tablet_Browser Detection - Fatal编程技术网

Javascript jquery hide()方法在tablet/mobile上不起作用

Javascript jquery hide()方法在tablet/mobile上不起作用,javascript,jquery,ipad,tablet,browser-detection,Javascript,Jquery,Ipad,Tablet,Browser Detection,我有一个JS函数,它只显示一个li元素,并根据设备检测条件隐藏包含在无序列表中的所有其他li元素 HTML 我尝试在循环中使用alert,检测功能与一个附加功能一起正常工作show_tab_content('listID')除了jqueryhide()method$('ul#menu>li')之外,所有这些似乎都可以正常工作 我尝试添加else条件来检查它是否不是移动设备,并且脚本在桌面浏览器上运行良好 function deviceDetectionScript() { var mo

我有一个JS函数,它只显示一个li元素,并根据设备检测条件隐藏包含在无序列表中的所有其他li元素

HTML

我尝试在循环中使用alert,检测功能与一个附加功能一起正常工作
show_tab_content('listID')除了jquery
hide()
method
$('ul#menu>li')之外,所有这些似乎都可以正常工作

我尝试添加else条件来检查它是否不是移动设备,并且脚本在桌面浏览器上运行良好

function deviceDetectionScript() {

    var mobileDetection = new MobileDetect(window.navigator.userAgent);

    if (mobileDetection.mobile()) {

        if (mobileDetection.os() == 'iOS') {
            // Same as above
        } 
        else if (mobileDetection.os() == 'AndroidOS') {
            // Same as above
        } 
        else if (mobileDetection.os() == 'WindowsMobileOS' || mobileDetection.os() == 'WindowsPhoneOS') {
            // Same as above
        }

    }
  else {
        alert('Desktop detected'); //alert is working fine on desktop
        $('ul#menu > li').not('#mainMenuGroup_poker').hide(); // this is working fine on desktop
        show_tab_content('poker'); // this function makes the selected li active - working fine
  }
} 

是否需要确保hide()方法在移动设备/平板电脑上也能正常工作?

在处理移动设备时,我也遇到了一些问题

你能试试这个代码吗

$('ul#menu > li').not('#mainMenuGroup_poker').each(function(){
var unwanted_li = $(this);
unwanted_li[0].style.display = 'none';
});
我还没有测试上述代码,但我认为它会起作用

要添加,不需要的_li的零索引具有对象的DOM引用

***准确的问题和解决方案***

经过长时间的调查,这就是为什么手机不能正常工作的确切原因

在这种情况下,两个函数并行工作。一个在JS开始执行时调用,另一个在document.ready上调用

在这个场景中,document.ready甚至在另一个函数停止工作之前就被调用了,因此这个函数没有可以隐藏的li

例如(已更改函数名称以保密详细信息)

第1245行

<script type="text/javascript">
    abc(false,true); // this is the function which was actually adding the li s
</script>

abc(假,真);//这是实际添加li s的函数
第1456行

<script type="text/javascript">
    // Device detection
    $(document).ready(function() {
        hidingScript();
    });
</script>

//设备检测
$(文档).ready(函数(){
隐藏脚本();
});
所以,在上面的例子中,hidingScript甚至在abc停止加载html之前就开始执行了。为了防止这种情况发生,建议采取以下措施:

<script type="text/javascript">
    // Device detection
    $(document).ready(function() {
        abc();
        hidingScript();
    });
</script>

//设备检测
$(文档).ready(函数(){
abc();
隐藏脚本();
});
**如果abc正在调用一个ajax,而ajax随后又附加了html,那么您需要在ajax调用的成功事件中调用hidingscript


此更改已经过验证,并且运行良好。

这就是
.hide()
的基本功能。对。但是如果他使用hide to jQuery引用而不是DOM引用,那么可能是其他JS的一部分的javascript事件将不会被触发。但是如果他用DOM裁判躲起来,他们会被触发。我不知道你在说什么。没有与隐藏元素或更改其样式相关的事件。jQuery并没有使用魔法来完成它的工作,当您调用
.hide()
时,它只是将
显示
样式设置为
none
,就像您的代码一样。Barmar,正如下面的代码一样,您完全可以在hide$('#foo').on('hide',function(){console.log('foo is hidden'))上添加事件;jQuery绝对充满魔力:)在移动设备上不会触发此类事件。我不确定这种行为的原因。但这是我之前遇到的问题,并按照建议的解决方案解决了这个问题
<script type="text/javascript">
    // Device detection
    $(document).ready(function() {
        hidingScript();
    });
</script>
<script type="text/javascript">
    // Device detection
    $(document).ready(function() {
        abc();
        hidingScript();
    });
</script>