我正在使用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>
答案 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
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()) - 虽然当然知道由于上面的第一段它会出错。