Dropdownlist Ajax

Добрый день! Не могу прикрутить аякс к выпадающему списку. Нужно при выборе значения из селека переходить по ссылке lpu/view/id=?, где id брать из значения.

Сейчас реализовано при помощи кнопки Submit.

Облазил форумы, пробовал activedropDownList, но пишет ошибку get_class() expects parameter 1 to be object.

Какие варианты могут быть? вот код


echo CHtml::form(array('lpu/view'),'GET');

$a = CHtml::listData($models, 'id','name');

echo CHtml::activedropDownList('id','',$a);

$this->widget('bootstrap.widgets.TbButton', array('buttonType'=>'submit', 'label'=>'Выбрать'));

echo CHtml::endForm(); 

Нифига не понял, при чем тут аякс вообще, но то, что Вы хотите, достигается одной строчкой на js:


$('#тут-айдишник-селекта').on('change', function(e) {window.location = '/lpu/view?id=' + e.target.value;})

(мог немного облажаться со значениями, проверьте)

Прочитал соседний пост, понял про аякс.

В общем, заменить window.location на $.get()

Нет, сперва вы правильно поняли! То есть сейчас просто селектор и кнопка "Выбор". а нужно при нажатии на одно из значений селектора - переходить на страницу lpu/view/id=?

Но не хочет что то… Сделал как писал.


<script type="text/javascript">

    $('#id').on('change', function(e) {window.location = '/lpu/view?id=' + e.target.value;})

</script>

Проще так:




<script type="text/javascript">

    $('#id').on('change', function() {window.location.replace('/lpu/view?id=' + this.value);})

</script>



Должно работать, и с location.replace() будут работать переходы вперед - назад.

(мог немного облажаться со значениями, проверьте)

Как минимум, проверьте id у activeDropDown, посмотрите, нет ли js-ошибок итд итп.

Ой, у меня не active а dropDownList простой, потому что при active выползает ошибка get_class() expects parameter 1 to be object, string given

Пофиг, все равно проверяйте всё по буквам.

Проще всего в обработчик засунуть console.log(e.target.value) (или this.value) и смотреть, что там вообще приходит.

сделал active таким способом


$em=Lpu::model()->findAll();

$model = new Lpu();

$list = CHtml::listData($em,'id','name');

echo CHtml::activeDropDownList($model,'id',$list, array('empty' => 'Please Select'));



id теперь Lpu_id, делаю


<script type="text/javascript">

    $('#Lpu_id').on('change', function(e) {window.location = '/lpu/view?id=' + e.target.value;})

</script>

и тишина


<script type="text/javascript">

    $('#Lpu_id').on('change', function(e) {console.log($(e.target.value))})

    

    

</script>

тишина

Зачем вам active?




CHtml::dropDownList("my_dropdown","",CHtml::listData(Lpu::model()->findAll(),'id','name'),

array('empty' => 'Please Select',"onchange"=>"js:function(){window.location.replace('/lpu/view?id=' + this.value);}"));



Вот собственно и все.

Привет из соседнего кабинета)

Не хочет :) ноль реакции :) правда

Привет!

Если ноль реакции - проблема у Вас. Посмотрите консоль, проверьте ошибки в ней. Собственно выведите в console.log(this.value).

У меня сей код работает верой и правдой, поэтому в его работоспособности не сомневаюсь.

Uncaught SyntaxError: Unexpected token (


<script type="text/javascript">

   $(function(){$('#my_dropdown').change(function(){window.location = '/yii/maximatorrus//index.php/lpu/view/' + $(this).val();})})

</script>

Работает)