1

javascriptのフォームによって「送信された」値をどのように使用しますか?

事実:
これは、JavaScriptを使用しているPHPドキュメントです。これは、
サーバーサイドスクリプトからは取得できないと思われるタイミング要素が必要なためです:)

単純化するために; 私が欲しいのは、このフォームが送信されたとき、またはボタンがクリックされたときです。

<form method="POST" action="test.php">
<input type="text" name="foo" size="30">
<input type="submit" value="Click me"> //it doesn't have to be submitted
<input type="button" action="some_action" value="Click me"> //an alternative solution
</form>

「foo」という名前のテキスト入力の値は、他の場所に表示されます。

フォームを送信する必要はありません。私が本当に望んでいるのは、ボタンを押すと、その値を他の場所で使用できるということです。

代わりにGETを使用する必要がありますか?$ _POST配列を使用できますか?AJAX(私は完全に役に立たない)を使用する必要がありますか?この状況でどうしたらいいのかわかりません。

4

3 に答える 3

1

$_POSTサーバー側のor配列から値を読み取り、$_REQUEST必要に応じてjavascript内でも、好きな場所に出力に挿入できます。例:

<?php
$myValue = $_POST['foo'];
?>
<script type="text/javascript"><!--
function writeMyValue() { document.write('<?php echo $myValue; ?>'); }
// --></script>
于 2010-08-10T10:30:43.223 に答える
1

フォームが送信されるかどうかに完全に依存しないとおっしゃっていたので、フォームをPOST/GETしないで値を取得する方が簡単です。本文セクションにインターフェイスロジックを記述した後、最後のフッターページに次のコードを記述する必要があります。-

anypage.php:-

<form method="POST" action="test.php">
  <input type="text" name="foo" id="foo" size="30" />
  <input type="submit" onclick="return writeFoo('foo_placeholder', 'foo');" value="Click me" /> //it doesn't have to be submitted
  <input type="button" onclick="return writeFoo('foo_placeholder', 'foo');" action="some_action" value="Click me" /> //an alternative solution
</form>

上記のコードはwriteFoo()、ボタン/送信のいずれかの「クリック」イベントでJS関数 ""を呼び出すなど、いくつかの小さな変更を加えたコードです。この関数は2つの引数を取ります:-

  • arg-値が出力されるHTML要素の宛先プレースホルダーIDについて言及します。
  • source-値を取得/取得するHTML要素のソースIDについて言及しています。

rightpart.php:-

<div>
    <span id="foo_placeholder"></span>
</div>

上記のHTMLコードはどのパネルにも使用できますが、「anypage.php」ページをユーザーに表示する場合は含める必要があります。これは、「foo」要素が呼び出されるときにプレースホルダー要素が存在する必要があるためです。writeFoo()" "関数の呼び出し時間とこのページ の両方で同じIDを使用するように注意してください。

footer.php:-

<script type="text/javascript"><!--
function writeFoo(arg, source) {
    if(document.getElementById(arg) != null) {
        document.getElementById(arg).innerHTML = document.getElementById(source).value;
    }
}
// --></script>

writeFoo()また、このページには、「 」関数 の定義を含む上記のJSコードが含まれている必要があります。

編集、@ Latzeの場合:-その ""ページを" "ページの同じブロックまたは他のページの任意のブロック( " " / " "ページなど)
に含めることができます。ただし、主なロジックは、特定のページを表示するときに、ソースID(値の取得元)とターゲット/プレースホルダーID(値が表示される場所)の両方が存在する必要があるということです(この場合は、 ""ページを表示しているとき)。 rightpart.phpanypage.phpheader.phpfooter.phpanypage.php

それが役に立てば幸い。

于 2010-08-10T10:47:51.010 に答える
1

PHPはサーバー上で実行されます。JavaScriptはブラウザで実行されます。これらの2つの言語は互いに話しません。同じマシン上で実行されることは言うまでもなく、同時に実行されることもありません。ユーザーがフォームを送信するとすぐに、ブラウザーがtest.phpサーバーから要求し、現在のページ、スクリプト、およびすべてが永久に失われます。

あなたが何をしたいのかを正確に理解するのは本当に難しいので、私はあなたにいくつかの一般的なヒントを提供します:

  • JavaScriptはフォームの送信を傍受できます。onsubmit要素にイベントハンドラーをアタッチする必要があり<form>ます。イベントに割り当てられた関数は、必要なことをすべて実行してから、戻るtrue(そして送信を続行する)か、戻るfalse(そして送信をキャンセルする)ことができます。

  • JavaScriptは、ほぼすべてのページ要素を読み書きできます。いわゆるDOMメソッドを使用する必要があります。

  • PHPは、HTML入力フィールドを含め、必要なものをすべて生成できます。

例:

<?php

$foo_value = date('Y-m-d H:i:s');

?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title></title>
<script type="text/javascript"><!--
window.onload = function(){
    var documentForms = document.getElementsByTagName("form");
    for(var i=0, len=documentForms.length; i<len; i++){
        documentForms[i].onsubmit = function(e){
            var currentForm = e.target;
            var fooValue = currentForm.elements.foo.value;

            var p = document.createElement("p");
            p.appendChild(document.createTextNode("Aborted submission: " + fooValue));
            currentForm.appendChild(p);

            return false;
        };
    }
};
//--></script>
</head>
<body>

<form method="POST" action="test.php">
<input type="text" name="foo" value="<?php echo htmlspecialchars($foo_value) ?>" size="30">
<input type="submit" value="Tryk her">
</form>

</body>
</html>

アップデート

これについてのちょっとしたメモ:

documentForms[i].onsubmit = function(e){
};

イベントハンドラーを割り当てる場合、仕様では、関数が呼び出されるたびに、最初の引数としてイベントオブジェクトを受け取る必要があります。そのオブジェクトは、関数呼び出しをトリガーしたイベントを表し、イベントをトリガーした元のDOMノードなどの追加情報を取得するために使用できます 。関数内でどのように呼び出すかは問題ではありません。e名前を付ける方法がわからないので使用します:)

于 2010-08-10T10:49:07.750 に答える