1

IE7 ではテストしていませんが、IE9、IE8、そしておそらく IE7 でも XMLHttpRequest オブジェクトに問題があります。FF4、Opera 11.01、Chrome 10 では問題なく動作します。 まず、このコードを何に使うか説明したいと思います。オプション Time が定義された HTML select タグがあります。次に、ユーザーがボタンをクリックすると、select がデータベースからの時間値で動的に更新されます。XMLHttpRequest オブジェクトを作成するコードは次のとおりです。

var xmlhttp = false;
if (window.XMLHttpRequest) {
        xmlhttp = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        try {
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {
                xmlhttp = false;
            }
        }
    }

ご覧のとおり、XMLHttpRequest オブジェクトの作成に失敗すると、ActiveXObject を作成しようとします。

リクエストを送信してレスポンスを取得するコードは次のとおりです。

xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            document.getElementById(time).innerHTML = xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET", "getTime.php?d=" + str, true);
      xmlhttp.send();

パラメータを getTime.php に送信すると、応答が id=time の select タグに書き戻されます。現在、IE9 および IE8 では、select タグに DB からの時刻を入力する必要はありません。

編集: getTime.php からコードを追加します。

<?php
$username="something";
$password="";
$database="somethingDB";

$date = $_GET["d"];
$timestamp = strtotime($date);
$nextDay= $timestamp + (1 * 24 * 60 * 60);// 7 days; 24 hours; 60 mins; 60secs
$date2 =  date('Y/n/j', $nextDay);


$link = mysql_connect('localhost', $username, $password);
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
mysql_select_db($database, $link);
$query="SELECT TIME(Date) FROM someTable WHERE Date >= '" .$date. "' AND Date < '" .$date2. "'";
$result=mysql_query($query);
if (!$result) {
    die('Could not query:' . mysql_error());
}
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    echo "<option>" .$row[0]."</option>";
}

mysql_free_result($result);

mysql_close($link);
?>

EDIT2:わかりました、これに従って、ラップを追加しまし。ここで、ラップされたコード選択タグも投稿します。

<div id="wrap">
        <select id="Time1" name="Time1" disabled="disabled">
            <?php if (empty($_GET['Time1'])) { echo "<option>Ura</option>"; } else { echo '<option>' . $_GET['Time1'] . '<option>'; } ?>
        </select>
    </div>

getTime.php のコードも変更されました。変更されたセクションのみを投稿します。

echo '<select id="Time1" name="Time1">';
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
    echo "<option>" .$row[0]."</option>";
}
echo '</select>';

ご覧のとおり、while ステートメントの前後に echo '....' を追加しただけです。今何が起こっていると思いますか。FF、Opera、Chrome では問題なく動作しますが、IE9 では値を取得するようになりましたが、ドロップダウン メニューには表示されず、実際のテキストとして出力されるだけです。また、値がテキストとして出力されると、ドロップダウン メニューが消えます。selectタグを含めたくないようです。よくわかりませんが、なぜ IE だけなのですか?

4

2 に答える 2

0

IE には「select」タグに問題があります。内部の「option」タグだけを置き換えることはできません。開始タグと終了タグ「select」も置き換える必要があります。

于 2011-11-01T14:59:03.950 に答える
0

ここで正しい解決策を見つけました。私はすでにdivボックスに選択タグを持っていました.欠けているコードはこの部分でした:

document.getElementById('box').style.display = 'block';

どうやらこれがないと、IE は select オブジェクトに入力する代わりに、実際のテキストとして表示するだけです。

于 2011-04-26T08:15:40.513 に答える