我是网页设计/php 和 javascript 的新手,我遇到了问题。请看一下这段代码:
<script type="text/javascript">
<!--
function thanksDiv(){
document.getElementById("myThanksDiv").style.display ='block';
}
function hideDiv(id){
document.getElementById(id).style.display='none';
}
//-->
</script>
<form id="contacts-form" method="post" action="email.php" target="myiframe">
<fieldset>
<div class="alignright"><a href="#" onClick="document.getElementById('contacts-form').submit()">Send Your Message!</a></div>
</fieldset>
</form>
<iframe name="myiframe" id="myiframe" src="" width=1 height=1 style="visibility:hidden;position:absolute;"></iframe>
<div id="myThanksDiv" style="width:200px;height:150px;position:absolute;left:50%; top:20px; margin-left:-100px;border:1px solid black; background:#fff;display:none;padding:20px;">Thanks! <br />Your message was sent.</div>
在 email.php 中:
echo '<script type="text/javascript">'
, thanksDiv();'
, '</script>';
?>
这个想法是,当我点击“发送您的消息”时,我应该看到一个框,上面写着“消息已发送”,但我没有。
如果我不浏览 email.php 页面,而只是从表单提交链接调用ThanksDiv,那么它就可以工作。知道为什么吗?
最佳答案
iframe 中的 JavaScript 与定义该函数的父文档不在同一“范围”内。
为了调用它,请尝试:
echo '<script type="text/javascript">'
, 'parent.thanksDiv();'
, '</script>';
区别在于“parent”,它告诉 JS 在框架的父级中查找该函数;)
请确保所有内容都位于同一域/端口上,否则您可能会违反同源政策,因此可能无法正常工作。
编辑
以下配置在我的机器(PHP5、Firefox)上运行良好:
测试.html
<html>
<head>
<script type="text/javascript">
<!--
function thanksDiv(){
document.getElementById("myThanksDiv").style.display ='block';
}
function hideDiv(id){
document.getElementById(id).style.display='none';
}
//-->
</script>
</head>
<body>
<form id="contacts-form" method="post" action="email.php" target="myiframe">
<fieldset>
<div class="alignright"><a href="#" onClick="document.getElementById('contacts-form').submit()">Send Your Message!</a></div>
</fieldset>
</form>
<iframe name="myiframe" id="myiframe" src="" width=1 height=1 style="visibility:hidden;position:absolute;"></iframe>
<div id="myThanksDiv" style="width:200px;height:150px;position:absolute;left:50px;top:20px; border:1px solid black; background:#fff;display:none;padding:20px;">Thanks! <br />Your message was sent.</div>
</body>
</html>
电子邮件.php:
<?php
echo '<script type="text/javascript">parent.thanksDiv();</script>';
?>
关于php 回显 javascript 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14744731/