2013-02-07 78 views
1

我是一個新的網頁設計/ PHP和JavaScript,我有一個問題。請看看這個代碼: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&#37;; 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即可。任何想法爲什麼?

回答

1

您的iframe中的javascript與定義該函數的父文檔不在相同的「範圍」中。

爲了叫它嘗試:

echo '<script type="text/javascript">' 
    , 'parent.thanksDiv();' 
    , '</script>'; 

所不同的是「父」,告訴JS在框架的父的功能看;)

請確保所有是對相同的域/端口,否則可能違反同源策略,因此可能無法使用。

編輯

這裏是我的機器(PHP5,火狐)上正常工作的配置:

的test.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> 

email.php:

<?php 
echo '<script type="text/javascript">parent.thanksDiv();</script>'; 
?> 
+0

這沒有奏效,當我點擊提交我被帶到一個空白頁面:$ – Kam

+0

嗨,對不起我現在要去工作了;)請看看這個問題在這裏:http://stackoverflow.com/問題/ 2161388/iframe-function-calling-from-iframe-to-parent-page-javascript-function?rq = 1爲了調試你的代碼,使iframe可見並在其上顯示一些內容,這樣你就知道其他的東西正在工作,響應顯示在iframe中。一旦有效,將JavaScript添加到您的回覆中。我會盡量在幾個小時內作出更好的回答;) – sled

+0

也許window.parent –

0

表單頁面中的所有內容都將在下一頁上消失。因此,不再有thanksDiv函數。當您提交表單時,您將完全轉到其他頁面。

直接調用該函數是可行的,因爲您仍然在該頁面上。

例如創建一個success.html頁面和email.php代替呼應JS做到這一點:

header('Location: http://www.yoursite.com/success.html'); 

這將重定向到成功頁面。

+0

你是對的,那我該怎麼做我想達到的目標? email.php發送電子郵件,如果成功,我希望看到一個包含消息的框:$ – Kam

+0

查看我已編輯的帖子 –

+0

...但他將表單提交給一個iframe,所以頁面不會被切換,響應會顯示在iframe中,他想調用父應用程序的一個函數,這應該是可能的;) – sled

0
echo '<script type="text/javascript">' 
    , 'thanksDiv();' 
    , '</script>'; 

第二行缺少''。

function thanksDiv(){ 
    document.getElementById("myThanksDiv").style.display ='block'; 
} 

這個函數應該在email.php中存在tooo。或者添加一個單獨的頁面並在其中包含頁面。

0

當您點擊發送您的留言電話

onclick="thanksDiv();";