无论选择如何,单选按钮始终提供相同的值

时间:2012-11-04 01:23:17

标签: php javascript ajax

希望有人可以帮助我。出于某种原因,即使选择了值为's'的选项,以下表单代码也始终将'route'单选按钮值设为'm'。

echo "<b><u>Route Information</u></b><br><br>";

echo "Select Route Name: <input type='radio' name='route' id='route1' value='s' onclick='switchRoute();' CHECKED><br>";
echo "<div id='txtLocation'><select name='route_name' id='route_name'>
    <option value='0000'>... select a location ...</option>";
echo "</select></div><br><br>";

echo "Or enter a new route (select the radio button for this option):<input type='radio' name='route' id='route2' value='m' onclick='switchRoute();'><br>";
echo "&nbsp&nbsp&nbsp&nbspRoute Name:<br>&nbsp&nbsp&nbsp&nbsp<input name='new_route_name' size='50' disabled='true' class='input-xlarge'><br><br>";
echo "&nbsp&nbsp&nbsp&nbspRoute Grade:<br>&nbsp&nbsp&nbsp&nbsp<input type='number' name='route_grade'  class='input-mini' disabled='true'><br><br>";
echo "&nbsp&nbsp&nbsp&nbspRoute Description <i>(optional)</i>:<br>&nbsp&nbsp&nbsp&nbsp<textarea name='route_description' class='input-xxlarge' rows='3' disabled='true'></textarea><br><br>";

使用以下ajax代码填写route_name select:

function showUser(str)
{
    if (str=="")
      {
      document.getElementById("txtLocation").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()
      {
      var output = '';
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
        output = xmlhttp.responseText;
        document.getElementById("txtLocation").innerHTML=output;
        }
      }
    xmlhttp.open("GET","../model/selected_loc.php?l="+str,true);
    xmlhttp.send();
}

这个PHP代码调用了它:

echo "<b><u>Location Information</u></b><br><br>";
echo "<select name='loc_id' id='loc_id' onchange='showUser(this.value)'><option value='0000'>... select a location ...</option>";
$result = mysql_query("SELECT loc_id, name FROM location ORDER BY name");

while ($row = mysql_fetch_array($result))
{
    $id = $row['loc_id'];
    $name = $row['name'];
    echo "<option value='{$id}'>{$name}</option>";
}
echo "</select><br><br>";

还有这个javascript代码在表单上运行。

function switchRoute()
{
    if (document.getElementById('route2').checked)
    {
        document.submitroute.route_name.disabled=true;
        document.submitroute.new_route_name.disabled=false;
        document.submitroute.route_grade.disabled=false;
        document.submitroute.route_description.disabled=false;

    }
    else if (document.getElementById('route1').checked)
    {
        document.submitroute.route_name.disabled=false;
        document.submitroute.new_route_name.disabled=true;
        document.submitroute.route_grade.disabled=true;
        document.submitroute.route_description.disabled=true;
    }
}

感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:3)

我觉得很傻,但我自己解决了。

在收到我的数据的页面中:

if ($route = "m")

而不是:

if ($route === "m")

这是重新分配$ route变量而不是比较它。我发誓我早些时候检查过,但有时很容易错过这样的小事。

感谢所有帮助或查看我问题的人。

答案 1 :(得分:0)

很难说你给的代码。没有&lt; form&gt;您发布的代码中的标记,因此我假设它们包装了第一个代码块。

附加到按钮时的以下代码显示当前选择的选项。 不禁想知道你是如何获得所选择的选项,同样重要的是,你正在做什么。

JS:

function showCurrent(inputName)
{
    var inputList = document.getElementsByTagName('input');
    var numRadios = 0, i, n = inputList.length;
    var value = null;

    for (i=0; i<n; i++)
    {
        if ( (inputList[i].getAttribute('type') == 'radio') && (inputList[i].getAttribute('name') == inputName) )
        {
            numRadios++;
            if (inputList[i].checked)
                value = inputList[i].getAttribute('value');
        }
    }
    alert("Num radios in the '"+ inputName + "' group: " + numRadios + ", value=" + value);
}

HTML:

<input type='button' value='getCurValue' onclick='showCurrent("route");'/>

FWIW:在表单提交时将一些内容传递给php需要一个技巧,在html代码中命名元素。即,html中的名称必须包含数组访问运算符[]。 &lt;选项&gt;例如,元素需要以这种方式命名。 我没有理由以这种方式传递单选按钮值,所以如果它们的工作方式相同则不知道 - 或者更具体地说,如果这与您的问题有任何关联。

一个例子:

<form action='testCombo.php'>
        <select name='test[]' multiple='multiple'>
            <option value='1'>a</option>
            <option value='2'>b</option>
            <option value='3'>c</option>
            <option value='4'>d</option>
        </select>
        <input type='submit' value='submit'/>
    </form>