1

メインページのscada.phpとサブページのsite.phpの2つのファイルがあります。Scada.phpには、次のようなリンクが含まれています。

<FORM action="site.php" method="post">
<li><td class="normal"><input type="image" name="sitename" 
value="Dublin" src="radiotower.jpg" alt="Dublin" title="Dublin"/>
Dublin
</td></li>
</form>

Site.phpはここでサイトの名前にアクセスします:

<?php
 $site = $_POST["sitename"];
 echo "<title id='title'>".$site."</title>";
?>

次に、JSでそれを取得してページに表示し、データベースクエリで使用します。

<script>
var site = document.getElementById("title").innerHTML;
document.getElementById("alert").innerHTML = "<h2>"+site+"</h2>";
</script>

サイト名の文字列の長さをチェックして、名前の文字( "Dublin")のみが含まれ、HTMLタイトルタグが含まれていないこと、および長さが6文字で正しいことを確認しました。

これはChromeで正常に機能します。すべてがスムーズで、期待どおりに実行されます。IEとFirefoxでは、「sitename」が未定義のインデックスであるというエラーが発生します。site.phpのグローバルでvardumpを実行した結果、Chromeは3つの変数(sitename_x、sitename_y、sitename)を生成します。FirefoxとIEは2つ(sitename_xとsitename_y)しか表示せず、sitenameがありません。

FirefoxとIEでのみ発生する$_POSTの問題を検索しましたが、有用なものは見つかりませんでした。送信ボタンが押されないと誰かが言ったが、ページを操作する唯一の方法は入力ボタンを押すことなので、ここでは間違いなく問題ではない。可変サイト名は一体どこに迷い込んでいますか?

編集:私は最初は少し不明確でした。フォームには複数の入力が含まれているため、これはより正確です。

<FORM action="site.php" method="post">
<li><td class="normal"><input type="image" name="sitename" value="Dublin"
src="radiotower.jpg" alt="Dublin" title="Dublin"/>
Dublin
</td></li>
<li><td class="normal"><input type="image" name="sitename" value="Temple" 
src="radiotower.jpg" alt="Temple" title="Temple"/>
Temple
</td></li>
</FORM>
4

2 に答える 2

2

画像フォームの入力では、クリックされたx座標とy座標のみが返されます。Chromeはここでは間違っており、名前と値のペア、および座標を返すことで標準に準拠していないと思います

サイト名に別の非表示の入力を行うと、次のようになります。

<form>
  <input type="hidden" name="sitename" value="Dublin" />
  <input type="image" name="siteimg" src="radiotower.jpg" />
</form>

編集:jQueryの使用が問題にならない場合は、このようなアプローチを使用したほうがよいと思います

<form action="" method="post" id="form">
    <div><img src="radiotower.jpg" alt="Dublin" title="Dublin" class="location" /></div>
    <div><img src="radiotower.jpg" alt="Temple" title="Temple" class="location" /></div>
    <div><input type="hidden" name="sitename" id="sitename" value="" /></div>
</form>

<script>
$(function() {
    $('.location').click(function() {
        var site = $(this).attr('alt');
        $('#sitename').val(site);

        $('#form').submit();
    });
});
</script>

編集2:これをHTMLに追加して、jQueryを含めます。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

于 2013-02-28T16:05:48.410 に答える
0

確かに、入力タイプはtext、期待される値が「ダブリン」の場合である必要があります。Chromeは、入力が実際にはテキストであることを認識するのに十分なクリーバーである可能性がありますが、FFとIEはより騙されやすく、変数を設定しようとさえしません。

于 2013-02-28T16:05:18.477 に答える