1

***編集

@alditis TY、あなたの提案を試みましたが、その後Javascriptが機能しません。機密データが含まれていないため、これはそれほど安全である必要はありません。また、これらのクエリを今後さらに使用する予定なので、配列全体をそこに置くことをお勧めします。

@Barmarはい、そうです。最後の2番目のスニペットは、Google Chromeがデバッガーを使用して出力をどのように見るかを示しています。これがとても奇妙である理由です。

@FreudianSlip私は何かを試していましたが、元に戻すことはありませんでした。

@saeed arab sheybani よくわからない?コードは機能し、リストは問題なく表示されますが、問題は$_REQUEST['pos_no']ないようです。出力コードに従って送信時に機能するはずです。おそらくあなたの言っていることが理解できません。私にリンクできる例はありますか?


PHP/Javascript の動的に入力されたコンボ ボックスを mysql クエリで動作させようとしていますが、ほとんどの場合、送信ボタンを押すまで正常に動作します。スクリプトは、この時点で私が望んでいることを正確に実行します。

私が見ることができるものから、置換コードは$_POST配列から除外されています。フォームが読み込まれると、期待するフィールドがリストされるか$_post、その場で配列が作成されるため、これが発生していると思います。したがって、新しいコードを挿入すると、おそらく無視されますか? 単なる推測ですが、論理的に思えます。もしそうなら、これをどのように回避しますか? これは、1か月ほど私を悩ませてきました。

Javascript:

<script type="text/javascript">
    $(document).ready(subpos_selectbox_change);
    function subpos_selectbox_change(){
        $('#subpos').change(update_position_number);
    }
    function update_position_number(){
        var subpos=$('#subpos').attr('value');
        $.get('get_list.php?subpos='+subpos, show_posnumbers);
    }
    function show_posnumbers(ss){
        $('#position_number').html(ss);
    }
</script>

get_list.php

switch($_REQUEST['subpos']){

    case 'AO2';
        $teamQuery = "SELECT * FROM establishment_positions WHERE position_filled='0' AND active='1' AND position_acrynom='AO2'";
        break;

    case 'AO3';
        $teamQuery = "SELECT * FROM establishment_positions WHERE position_filled='0' AND active='1' AND position_acrynom='AO3'";
        break;

    case 'AO4';
        $teamQuery = "SELECT * FROM establishment_positions WHERE position_filled='0' AND active='1' AND position_acrynom='AO4'";
        break;

    case 'AO5';
        $teamQuery = "SELECT * FROM establishment_positions WHERE position_filled='0' AND active='1' AND position_acrynom='AO5'";
        break;

    case 'AO6';
        $teamQuery = "SELECT * FROM establishment_positions WHERE position_filled='0' AND active='1' AND position_acrynom='AO6'";
        break;

    case 'AO7';
        $teamQuery = "SELECT * FROM establishment_positions WHERE position_filled='0' AND active='1' AND position_acrynom='AO7'";
        break;

    case 'AO8';
        $teamQuery = "SELECT * FROM establishment_positions WHERE position_filled='0' AND active='1' AND position_acrynom='AO8'";
        break;

    case 'SO1';
        $teamQuery = "SELECT * FROM establishment_positions WHERE position_filled='0' AND active='1' AND position_acrynom='SO1'";
        break;

}

echo '<select name="pos_number" id="pos_number">';
$ss = null;
$result = mysql_query($teamQuery);
while($row = mysql_fetch_array($result))
{
    $ss.= '<option value=' . $row['position_id'] . '>' . $row['position_number'] . '</option>';

}
echo $ss;
echo '</select>';

..そして、Javascript が機能する前の html コードの ID を次に示します。

<div class="newusr">
    <table>
        <form id="newusr" action="includes/insertuser.php" method="post">
            <tr><td>First Name: </td><td><input type="text" name="firstname"></td></tr>
            <tr><td>Middle Name: </td><td><input type="text" name="middlename"></td></tr>
            <tr><td>Last Name: </td><td><input type="text" name="lastname"></td></tr>
            <tr><td>Username: </td><td><input type="text" name="usr"></td></tr>
            <tr><td>sex:</td><td><select name="sex"><option value="1">Male</option><option value="0">Female</option></select></td></tr>
            <tr><td>Position: </td><td><select name="subpos" id="subpos"><?php echo $subpos; ?></select><td></tr>
            <tr><td>Position No: </td><td id="position_number"><select name="pos_number"><option value="">choose a Position first</option></select></td></tr>
            <tr><td>Contractor: </td><td><input type="checkbox" name="contractor" value="1"></td></tr>
            <tr><td>Start date: </td><td><input type="date" name="empStrtDte"></td></tr>
            <tr><td>Active: </td><td><input type="checkbox" name="active" value="1"></td></tr>
            <tr><td><?php echo '<input type="submit"><input type="reset" value="Reset"></td></tr>'; ?>
        </form>
    </table>
</div>

subpos の値を変更した後の HTML コード (Chrome から):

<select name="subpos" id="subpos">
    <option value="AO2">AO2</option>
    <option value="AO3">AO3</option>
    <option value="AO4">AO4</option>
    ...
</select></td>
<select name="pos_number" id="pos_number">
     <option value="2">805620121</option>
     <option value="10">805678998</option>
</select>

すべてが良さそうに見え、この時点で私が望んでいることを正確に実行します。次に、配列とブームを印刷しますが、pos_number 値がありません。理由がわかりません。

Array
(
    [firstname] =&gt; test
    [middlename] =&gt; test
    [lastname] =&gt; test
    [usr] =&gt; 
    [sex] =&gt; 1
    [subpos] =&gt; AO3
    [empStrtDte] =&gt; 2012-02-19
)
4

2 に答える 2

0

問題は、Javascript が結果を DOM にバインドしていなかったことです。代わりにいくつかの JQuery を使用しました。フザア。

貢献してくれたすべての人に感謝します。

JavaScript:

<script type="text/javascript">
            $(document).on('change', "#subpos", function(){
                var subpos=$('#subpos').attr('value');
                $.get('get_list_test.php?subpos='+subpos, function(ss){
                    $('#pos_number').html(ss);
                });
            });
</script>

HTML:

<tr><td>Position No: </td><td><select name="pos_number" id="pos_number"><option value="">choose a Position first</option></select></td></tr>

PHP:

$teamQuery = "SELECT * FROM establishment_positions WHERE position_filled='0' AND active='1' AND position_acrynom='".mysql_real_escape_string($_REQUEST['subpos'])."'";

$ss = null;
$result = mysql_query($teamQuery);
while($row = mysql_fetch_array($result))
{
    $ss.= '<option value=' . $row['position_id'] . '>' . $row['position_number'] . '</option>';

}
echo $ss;
于 2013-01-04T09:18:44.887 に答える
0

選択メニューの場合、オプションがキーボードおよびマウス ボタン イベントによって選択され、NoScript が実質的に干渉すると、変更イベントが発生します。テキスト フィールドまたはテキスト領域の場合、フィールドがフォーカスを失ったときに change イベントが発生します。したがって、「イベントの変更」を直接使用することはできません(キーボードまたはマウスでオプションを選択せず​​に)、次のタラを試してください:

<select name="subpos" id="subpos">
<option value="1">first</option>
<option value="2">secound</option>
<option value="3">Third</option>
</select>


<script>
    $(function() {
        $('#subpos').change(function() {
            console.log('subpos has changed');
        }); 
        $("#subpos").val('2');//combo box has change but dont appear in console log. why?
   });
</script>

実行後。コンソール ログを参照してください。コンソール ログに「subpos has changed」が表示されません。しかし、実際には subpos が 'second' に変更されました
。何が起こったのでしょうか? 選択が変更されたときにコンソールに記録する必要があります。ドロップダウンからそのオプションを選択すると、cosole ログが変更されたことを確認できます。

于 2013-01-01T09:53:20.273 に答える