2012-08-11 49 views
0

我有一个下拉列表(yii框架),我想更改其选定的值。 这是下拉列表:用jquery更改下拉列表的选定值

<?php 
       $t = is_null($dataProvider[$key]['room']) ? 'NA' : $dataProvider[$key]['room']; 

       echo 'Room Number : ' . CHtml::dropDownList(Rooms::model(), 'roomID', CHtml::listData(Rooms::model()->findAll(array(
            'condition' => 'status = :status or roomID = :roomID', 
            'params' => array(
             ':status' => 'ready', 
             ':roomID' => $dataProvider[$key]['room'] 
            ) 
           )), 'roomID', 'roomID'), array('id' => 'room', 'class' => 'ui-widget-content', 'empty' => 'NA', 
       'options' => array($t => array('selected' => true)))) 
       ; 
       ?> 

现在这个下拉列表是父母的孩子,我想克隆这样我就可以再次使用它,所以我用这个克隆它:

var test =$("#users-contain").children(':last').clone(true,true); 
     test.children("#room option[value='3']").attr('selected', 'selected'); 
     test.children('table').children('tbody').children('tr').empty(); 
     var inner = test.clone(true,true); 

我将使用var inner来更改元素中的一些内容并将其克隆到页面上。 现在,这里是我的问题,我的新克隆这是VAR测试,我想改变的下拉列表中的选择的价值,但它并没有在所有的工作,我想这:

test.children("#room option[value='3']").attr('selected', 'selected'); 

和这样的:

test.children('#room').val(3); 

没有什么工作,我也试过,我不记得其他的事情,但是我要指出,使用最后一个,当我与调试它:

console.log(test.children("#room").val()); 

它OUTP值为'3',这是正确的,但是当我在页面上显示它时,旧下拉列表中的选定值不会改变。 这是结果:

<select id="room" class="ui-widget-content" name=""> 
<option value="">NA</option> 
<option value="1">1</option> 
<option value="2" selected="selected">2</option> 
<option value="3">3</option> 
<option value="4">4</option> 
<option value="5">5</option> 
<option value="6">6</option> 
</select> 

在此先感谢您。

回答

0

test.children("#room option[value='3']").attr('selected', 'selected')有基本的想法,但children得到子元素只有和过滤它们。所以它会得到#room,但它不会得到option元素,因为<option>test的孙子女。相反,使用find,它搜索所有后代元素。这里的代码:
test.find("#room option[value='3']").attr('selected', 'selected')

+0

谢谢你,它的工作=) – user1438230 2012-08-11 12:21:59