Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/69.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_Html_Jquery Mobile - Fatal编程技术网

Javascript 脚本仅在刷新后工作

Javascript 脚本仅在刷新后工作,javascript,html,jquery-mobile,Javascript,Html,Jquery Mobile,在第一页中,我有一个带有链接的图像,您可以单击它: <div style="width: 97px; height: 130px;"> <a href="objects_lost.html?obj=images/dog.png"> <div> <img src="images/dog.png" alt="" style="width: 100%; height: 100%;"> <p style="color: black; margin-t

在第一页中,我有一个带有链接的图像,您可以单击它:

<div style="width: 97px; height: 130px;">
<a href="objects_lost.html?obj=images/dog.png">
<div>
<img src="images/dog.png" alt="" style="width: 100%; height: 100%;">
<p style="color: black; margin-top: 0px;">DOG</p>
</div>
</a>
</div>

当你点击它时,会打开一个新页面,显示你点击的图像。但它只在一次刷新后工作

    <img src="" id="image"/>        
    <script type="text/javascript">
        function whatImg() {
            var str = getUrlVars()["obj"];
            document.getElementById('image').src = str;
        }

        function getUrlVars() {
            var vars = [], hash;
            var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
            for(var i = 0; i < hashes.length; i++)
                {
                hash = hashes[i].split('=');
                vars.push(hash[0]);
                vars[hash[0]] = hash[1];
                }
            return vars;
            }
        whatImg();
    </script> 

函数whatImg(){
var str=getUrlVars()[“obj”];
document.getElementById('image').src=str;
}
函数getUrlVars(){
var vars=[],散列;
var hashes=window.location.href.slice(window.location.href.indexOf('?')+1).split('&');
for(var i=0;i
有什么帮助吗?
我使用JQuery Mobile

如果哈希值发生变化,脚本将不会再次启动。您需要添加一个事件侦听器,如:

$(window).on("hashchange",function() {
  whatImg();
});

问题是在页面加载完成之前JavaScript正在运行。刷新时,页面从本地缓存加载(即更快),并且在脚本运行之前图像元素已准备就绪。如果您从本地服务器运行代码,您可能会注意到,由于HTML的快速加载,它在第一次尝试时就可以工作

正确的修复方法是让代码在加载后运行。在jQuery中,您可以这样做:

$( function() {
    whatImg();
});
这或多或少是以下各项的标准jQuery快捷方式:

$(window).load( function () {
    whatImg();
});

应该注意的是,建议使用
hashchange
的答案是有效的,因为
hashchange
在第一页加载时触发。您的URL中实际上没有哈希。正确的解决方案是让脚本在加载后运行。

您似乎没有使用jQuery…我不太擅长Javascript,但据我所知,它是从上到下解析的。尝试切换
getUrlVars
whatImg
,看看这有什么作用?另外,为什么不使用像PHP这样的服务器端脚本语言来补充JS呢?这样,你就可以简单地访问
$\u GET['obj']
,你甚至不需要“getUrlVars”。我是新手:(你能帮我编写代码吗?好的,它与$(window)一起工作。(“hashchange”,function(){whatImg();});注意有div标记(块元素)只有在html5中才允许使用标签。这里没有
hashchange
。唯一有效的原因是
hashchange
在加载时激发。@JeffB jQuery mobile在任何链接前添加一个哈希,并通过ajax加载其内容,这就是为什么这个“hashchange”有效;-)@godesign你是对的。我忘了他在使用jQuery Mobile。我完全同意你的观点,他的代码需要一个文档就绪语句。但在jquerymobile中,建议使用
pageinit
()。我在上面的评论中提到了为什么标签在我看来有效。