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
()。我在上面的评论中提到了为什么标签在我看来有效。