ドロップダウンセレクションを作成しています。各サブセレクションは、前の結果を使用してクエリを実行します。私は見つけた同様の投稿の後に自分の作品を検索して作成しましたが、残念ながら、それでも機能させることができません。どんな助けでも素晴らしいでしょう。ありがとうございました。
ドロップダウンにselectを使用しており、id = level1、level2、level3などです。
これが私のコードのhtmlドロップダウン選択部分です
Enter Auction Category : <input type="text" name="fcv" id="fcv" /> <br>
or Select Category : <br>
<select class="sspecial" name="level1" id="level1" onchange="getDropdownOptions()">
<option></option>
<?
$level1_sql="SELECT * FROM Ebay_Category WHERE Level = '1' ORDER BY Category";
$level1_results=mysql_query($level1_sql);
while($level1=mysql_fetch_array($level1_results)) {
if ($level1['Leaf']) {
echo "<option value='".$level1['ebay_category_id']."'>".$level1['Category']."</option>";
} else {
echo "<option value=''>".$level1['Category']."</option>";
}
}
?>
</select>
<br><br>
<select class="sspecial" name="level2" id="level2">
<option value=''></option>
</select>
ユーザーには、レベル1の場合にのみドロップダウンが表示されます。次に、そこから選択します。この時点で、レベル1の選択に基づいてレベル2にクエリが入力されるようにします。
これが私が頼りにしているjavascriptです
<script type="text/javascript">
$(document).ready(function() {
$('#level1').change(getDropdownOptions);
});
function getDropdownOptions() {
var val = $(this).val();
// fire a POST request to populate_L2.php
$.post('populate_L2.php', { value : val }, populateDropdown, 'html');
}
function populateDropdown(data) {
if (data != 'error') {
$('#level2').html(data);
}
}
</script>
私が使用する6つのレベルまたは選択があります。
- 親
- 1の子
- 2の子
- 3の子など
javascriptが実際に次のオプションリストにどのように入力されるかを理解するのに十分なほど理解していません。つまり、何かを省略していると確信しています。
上記の場合、メニューは元のクエリから親を取得しますが、変更しても、後続のクエリには何も起こりません。
誰かが提供できる方向性や支援を事前に感謝します。
ありがとうございました。
編集:populate_L2.phpコードを表示
mysql_connect("$servername", "$dbusername", "$dbpassword")or die("cannot connect");
mysql_select_db("$dbname")or die("cannot select DB");
$parentid=$_GET['value'];
$postSQL="select * Ebay_Category where Level='2' and ParentID=$parentid";
$postSelect=mysql_query($postSQL);
$html = "<option>--select--</option>";
while ($row = mysql_fetch_array($postSelect))
{
if($row['Leaf']!=0){
$html .= "<option value='".$row['CategoryID']."'>".$row['Category']."</option>";
} else {
$html .= "<option value=''>".$row['Category']."</option>";
}
}
配置について一言。ドキュメントの先頭にJavaScriptがあります。私はそこで完璧に動作する他のスクリプトを持っています-しかし、このスクリプトはヘッドセクションにロードする最後のスクリプトです。
これを投稿したので、テーブル名とフィールド名を確認し、エコーを入れて、populate_L2.phpにフォーカスが渡されているかどうかを知らせました。そうではありません。
編集済み
アラートを配置しました('getDropdownOptionsが実行されました'); getDropdownOptions()関数内の行-ドロップダウンの値を変更しても-何も変更されず、アラートもありません...。
ご提案ありがとうございます。
jqueryを使用して解決しました。技術的には元の質問を解決するので、今度は新しい質問を開く必要があります。
ドロップダウンを実行するには、最大3つが次のことを正常に実行しました。
ヘッダーにスクリプトを作成しました。
<script type="text/javascript">
function getInfo(str)
{
if (str=="")
{
document.getElementById("catTitle").innerHTML="";
return;
}
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
document.getElementById("catTitle").innerHTML=xmlhttp.responseText;
}
}
xmlhttp.open("GET","cat_title.php?q="+str,true);
xmlhttp.send();
}
</script>
次に、同じドキュメントで、
onchange ='getInfo(this.value)'呼び出しを使用して最初の選択を作成し、同じドキュメントにcatTitleのIDを持つスパンタグを追加しました(追加の選択ごとに繰り返します)
次に、スクリプトで呼び出すcat_title.phpファイル、
$vx=$_GET["q"];
$SQL="SELECT * FROM Ebay_Category WHERE ParentID='".$vx."' ORDER BY Category";
$result=mysql_query($SQL);
echo "<select id='lev3' onchange='getInfo2(this.value)'>";
while ($row=mysql_fetch_array($result)){
echo "<option value='".$row['CategoryID']."'>".$row['Category']."</option>";
}
echo "</select>";
エコーはリロードせずにフォームに送信され、次のオプションを選択するための新しい選択ボックスを作成します。
これにより、レベル1の値を選択して2のオプションを表示し、次にオプション2を選択して、その値を使用して3番目のオプションのセットを表示することができました。これ以上進むことができないため、個人的に問題が発生します。
xmlhttp.status = 500、最初の2を超えるすべての呼び出しで。それをリセットする方法を見つけたいと思っています-より深い解決策も必要な場合は質問をチェックしてください-もっと素晴らしいスタックを求めようとしているので特にその部分のオーバーフローサポート。