1

私は webdesign/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 ページを通過せず、フォーム送信リンクから thankDiv を呼び出すだけで機能します。理由はありますか?

4

4 に答える 4

1

iframe の JavaScript は、関数が定義されている親ドキュメントと同じ「スコープ」にありません。

それを呼び出すには、次を試してください:

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

違いは、フレームの親で関数を探すようにJSに指示する「親」です;)

すべてが同じドメイン/ポート上にあることを確認してください。そうしないと、Same Origin Policy に違反する可能性があり、動作しない可能性があります。

編集

私のマシン(PHP5、Firefox)で正常に動作する構成は次のとおりです。

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>';
?>
于 2013-02-07T06:14:41.157 に答える
0

フォーム ページのすべてのコンテンツは、次のページに表示されなくなります。そのため、thanksDiv 関数はなくなりました。フォームを送信すると、まったく別のページに移動します。

あなたはまだそのページにいるので、関数を直接呼び出すことは機能します。

success.htmlたとえば、ページを作成し、email.phpjs をエコーする代わりに次のようにします。

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

成功ページにリダイレクトされます。

于 2013-02-07T06:12:24.557 に答える
0
echo '<script type="text/javascript">'
   , 'thanksDiv();'
   , '</script>';

2 行目に ' がありません。

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

この関数は email.php にもあるはずです。または別のページに追加して、そこにページを含めます。

于 2013-02-07T06:12:27.083 に答える
0

[メッセージを送信] をクリックしたとき

onclick="thanksDiv();";
于 2013-02-07T06:15:02.620 に答える