下拉列表和codeigniter的问题

时间:2010-03-18 16:24:50

标签: javascript jquery codeigniter drop-down-menu

我正在使用2个下拉列表,其中第二个从第一个选项填充 我的问题是我没有从第一次下拉中获得价值 我得到的是[object Object] 这是javascript和php代码:
感谢。

使用Javascript:

function getState(){
$("#selectestate").bind("change",function(){

    $("#selectcity").load("results/ajaxcity", {stat: $(this).val()} ); //This is where the problem is
    alert({stat: $(this).val()});//Shows [object Object]
});
return false;

}

PHP:

$curstat=$this -> input -> post('state'); //current selected state in first dropdown
<tr>        
    <?php $js = 'id="selectstate" onChange="getState();"';?>
    <td><h3> State: </h3></td>
    <td id="selectestate"><?php echo form_dropdown('state', $stat, $curstat, $js);?></td> 
</tr>    
<tr>    
    <td><h3> City: </h3></td>
    <td id="selectcity"><?php echo form_dropdown('city', $cit);?></td>
</tr>

3 个答案:

答案 0 :(得分:1)

您需要更改此代码:

$("#selectestate").bind("change",function(){

到此:

$("#selectestate select").bind("change",function(){

您要求<td id="selectstate">的价值......当然是null#selectstate select加载您要查找的实际<select>元素,这样您就可以获得其值。

您还需要将$("#selectcity")更改为$("#selectcity select")以避免匿名功能中出现同样的问题。

最后,您的警报按预期运行。 {}在Javascript中定义了一个对象。因此,您正在警告包含单个属性的对象。只需alert($(this).val());// Should show the value

如果它仍然失败,那是因为:

A)您的网址错误 或
B)results/ajaxcity

调用的php函数有问题

编辑:


Smacks head :我应该抓住这个。在你的代码中你有这个功能:

1.    function getState(){
2.    $("#selectestate select").bind("change",function(){
3.    
4.        $("#selectcity select").load("results/ajaxcity", {stat: $(this).val()} ); 
5.        alert($(this).val());
6.        });
7.    return false;
8.    }

您生成的HTML看起来像这样:

<select name="state" id="selectstate" onChange="getState();">

问题:第一次使用<select>时调用函数,jQuery将匿名函数绑定到select(第2行)的change事件每次从此选择从现在开始触发更改事件时执行。每次选择下拉列表时,新的匿名函数都会被第2行绑定,并且当前绑定到下拉列表的函数的所有都会被执行。 (因此,如果您使用下拉N次,则“更改”功能将触发N-1次。)

解决方案:使用$(document).ready()bind您的功能。您的重组代码将如下所示:

<script type="text/javascript">
function getState(element){
    $("#selectcity select").load("results/ajaxcity", {stat: $(element).val()} );
    alert($(element).val());
    return false;
}
</script>
//... snip ...
<?php $js = 'id="selectstate"';?>
//... snip ...
<script type="text/javascript">
$(document).ready(function() {
    $("#selectestate select").bind("change", getState);
});
</script>

答案 1 :(得分:0)

您在value选择器中访问的td元素没有"#selectestate"。您应该找到内部{stat: $(this).val()}元素select

,而不是{stat: $(this).find("select").val()}

答案 2 :(得分:0)

您正在处理TD的处理程序中加载<td>元素($(this))的.val()。您需要获取<select>标记的ID。

如果你真的找不到ID(或者codeigniter没有设置它......因为form_dropdown()正在创建它而无法从你的例子中说出来),那么你可以尝试$(this).val()而不是$('select',this).val() 1}}将找到TD中第一个<select>标记的值。

同样在你的调试中,{stat: $(this).val()} 一个对象,所以当然这就是alert()显示的内容。尝试使用firebug,然后将alert()更改为console.log() - firebug控制台将显示完整对象。你也可以简单地做警报($(this).val()) - 虽然当然知道由于上面的第一段它会出错。