在帖子php javascript中缺少变量

时间:2013-01-01 08:00:19

标签: php javascript javascript-events combobox dynamic-controls

*** EDIT

@alditis TY,试过你的建议,但javascript后不起作用。这个不需要那么安全,因为没有涉及敏感数据,而且我有点学习它。此外,我将在轨道上更多地使用这些查询,所以我更希望在那里拥有整个阵列。

@Barmar是的,第二个最后的snippit展示了Google Chrome如何使用它的调试器查看输出。这就是它如此奇怪的原因。

@FreudianSlip我正在尝试一些东西而且从不把它放回去。

@saeed arab sheybani我真的不明白?代码工作,列表填充正常问题是$ _REQUEST ['pos_no']似乎不存在。它应该按照输出代码提交。也许我没有得到你说的话,你能举个例子来链接我吗?


我正在尝试通过mysql查询获取一个php / javascript动态填充的组合框,并且大部分工作正常,直到我点击提交按钮。这些脚本到目前为止完全符合我的要求。

从我所看到的,替换代码被排除在$ _POST数组之外。我假设这种情况正在发生,因为一旦表单加载它列出了期望的字段或当场创建$ _post数组,因此通过插入一些新代码它可能会忽略它?只是一个猜测,但似乎合乎逻辑,如果是这样,如何解决这个问题?这已经困扰了我一个月左右了。

的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代码:

<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(来自Chrome)中的值后的

HTML代码:

<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
)

2 个答案:

答案 0 :(得分:0)

对于选择菜单,当键盘和鼠标按钮事件和NoScript有效地选择了一个选项时,会发生更改事件。  对于文本字段或文本区域,当字段失去焦点时会发生更改事件。  因此你不能直接使用“改变事件”(没有通过键盘或鼠标选择任何选项)   试试这个鳕鱼:

<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日志已更改

答案 1 :(得分:0)

问题是Javascript没有将结果绑定到DOM。使用了一些JQuery代替。 Huzzaah。

感谢所有贡献。

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;