Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.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没有按顺序执行?_Javascript - Fatal编程技术网

为什么我的JavaScript没有按顺序执行?

为什么我的JavaScript没有按顺序执行?,javascript,Javascript,我不明白为什么我的代码运行不正常。。。下面的代码不执行document.write部分,但它会在完成后执行该部分。我认为这与时间有关,让浏览器执行。我尝试在某些部分使用setTimeout,但它要么不起作用,要么我做错了 function isBrowserMobile() { var iPadAgent = navigator.userAgent.match(/iPad/i) != null; var iPodAgent = navigator.userAgent.match(

我不明白为什么我的代码运行不正常。。。下面的代码不执行document.write部分,但它会在完成后执行该部分。我认为这与时间有关,让浏览器执行。我尝试在某些部分使用setTimeout,但它要么不起作用,要么我做错了

function isBrowserMobile()
{
    var iPadAgent = navigator.userAgent.match(/iPad/i) != null;
    var iPodAgent = navigator.userAgent.match(/iPhone/i) != null;
    var AndroidAgent = navigator.userAgent.match(/Android/i) != null;
    var webOSAgent = navigator.userAgent.match(/webOS/i) != null;
    if (iPadAgent || iPodAgent || AndroidAgent || webOSAgent)
    {
       document.write("<body bgcolor='Orange'><b>Mobile browser detected!</b></body>");
       var choice = confirm("Do you want to visit the mobile site?")
       if (choice)
           mobile();
       else
           desktop();
    }
}
函数isBrowserMobile()
{
var iPadAgent=navigator.userAgent.match(/iPad/i)!=null;
var iPodAgent=navigator.userAgent.match(/iPhone/i)!=null;
var AndroidAgent=navigator.userAgent.match(/Android/i)!=null;
var webOSAgent=navigator.userAgent.match(/webOS/i)!=null;
if(iPadAgent | | iPadAgent | | AndroidAgent | | webOSAgent)
{
document.write(“检测到移动浏览器!”);
var choice=confirm(“您想访问移动站点吗?”)
如果(选择)
移动();
其他的
桌面();
}
}
编辑:

我建议您不要使用
document.write
,而是使用DOM,如下所示:

document.body.style.backgroundColor='Orange';
document.body.innerHTML='This is a text';
在桌面浏览器中测试代码时,可以将
true | |
添加到if条件的开头


我最初的回答使用了innerText,它不是标准的浏览器,很少在函数完成处理之前更新页面。因此,执行了
document.write
,但在函数完成之前,可能不会显示结果

正如minitech所说,这是一个相当垃圾的功能。您应该根据屏幕大小进行询问,而不是UA嗅探


请注意,如果该函数在文档加载完成后运行,则调用
document.write
将删除文档的全部内容,包括脚本。

此函数中有太多不好的地方。不管怎样,你能链接到一个演示问题的链接吗?“它在它刚刚好的时候执行该部分”:那到底是哪一部分?如果
iPadAgent | | iPadAgent | | AndroidAgent | | webOSAgent
false
,则不会执行
document.write
。桌面版本通过
desktop()
呈现?还是NOOP?mobile()和desktop()都调用此处未列出的其他函数。我的意思是document.write根本不执行,它只是继续执行if…else。。。部分顺便说一句,我在我的iPod touch上测试了这个,所以它应该执行document.write部分。我会尝试用
div
替换
body
标记“浏览器很少在函数完成处理之前更新页面”你从哪里得到的?这就是它们的工作方式。浏览器不知道脚本何时完成了对页面的修改,因此,与其在发生更改时显示更改(这会很烦人),不如等待所有更改完成后再显示单个更新
document.write
有点不同,一些浏览器会立即显示结果,但其他浏览器可能会等待。我不知道Rob,a似乎支持@valentinas观察。你能提供一个反演示或者说明书中的东西吗?你在iPad上试过吗?在IE 8中,在呈现页面之前,第二个提示出现的时间有一半。在我的iPhone上,“测试”一词直到第二次提示被取消后才出现。最初的印象是:你有一台装有IE8的iPad?让我看看。。。在Win7上。我用铬做了测试。