Проблема с выпадающим и codeigniter - PullRequest
2 голосов
/ 18 марта 2010

Я использую 2 раскрывающихся списка, где второй заполняется из первого выбора.
Моя проблема в том, что я не получаю значение из первого выпадающего списка.
Я получаю [объект объекта].
Вот код 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 ]

1 голос
/ 18 марта 2010

Вам необходимо изменить этот код:

$("#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) Ваш URL неверный
или
Б) Что-то не так с функцией php, вызываемой results/ajaxcity

EDIT:


Хлопает головой : Я должен был поймать это. В вашем коде у вас есть эта функция:

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), которое будет выполняться каждый раз событие изменения начинается с этого выбора , с этого момента . Каждый раз, когда вы выбираете раскрывающийся список, новая анонимная функция связывается строкой # 2, и выполняются все функций, которые в данный момент связаны с раскрывающимся списком. (Таким образом, если вы используете раскрывающийся список N раз, функция «change» сработает 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>
0 голосов
/ 18 марта 2010

Вы загружаете .val () элемента <td> ($(this), внутри вашего обработчика для TD). Вам необходимо получить идентификатор тега <select>.

Если вы действительно не можете найти идентификатор (или codeigniter не устанавливает его ... невозможно узнать из вашего примера, поскольку form_dropdown () его создает), тогда вместо $(this).val() вы можете попробовать $('select',this).val(), который найдет значение первого тега <select> в TD.

Также в вашей отладке {stat: $(this).val()} является объектом, поэтому, конечно, именно это и показывает alert (). Попробуйте использовать firebug, а затем измените alert () на console.log () - консоль firebug покажет вам полный объект. Вы также можете просто сделать alert ($ (this) .val ()) - хотя, конечно, понимаете, что это будет неправильно из-за первого абзаца выше.

0 голосов
/ 18 марта 2010

Нет элемента value для td, к которому вы обращаетесь в селекторе "#selectestate".Вместо {stat: $(this).val()} вы должны найти внутренний select элемент {stat: $(this).find("select").val()}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...