Изменение в раскрывающемся текстовом поле обновлений в той же динамически создаваемой строке - PullRequest
1 голос
/ 12 сентября 2011

Вы были настолько полезны этим утром, что я подумал, что было бы неплохо поспорить, я мог бы получить помощь по этому вопросу.Я динамически создал строки в таблице, одно поле является раскрывающимся, чтобы выбрать тип оплаты.Когда это изменится, я хочу обновить поле в той же строке с суммой $$.Я получаю правильную плату и правильный идентификатор из моих предупреждений («плата составляет class_fee [37], а сумма составляет 225,00»), но текстовое поле с платой $$ не обновляется.Идентификатор текстового поля: id="class_fee[<?php echo $i ?>]". Вот jQuery (может быть, я не прав в том, как я идентифицирую это поле $$?):

    $(".fee_id_select").bind("change",function ()
{  
        var $class_fee = 'class_fee[' + this.id + ']';

      jQuery.getJSON(
          'get_fee_json.php',
          {'id': this.value},
          update_fee_amount
      );
        function update_fee_amount(data, textStatus)
        {
            var fee = data || {}; 
      alert('the fee is ' + $class_fee + ' and the amount is ' + fee.fee_amount);                   
            jQuery('#' + $class_fee).val(fee.fee_amount || '');    
        }                                   
});

Вот фактический HTML-код внутри цикла foreach.:

            <td>
                <input type="text" 
                name="students[<?php echo $i ?>][class_fee]" 
                id="class_fee[<?php echo $i ?>]"
                value="<?= html($class['class_fee']) ?>" 
                size="6" >
            </td>  

(да, в скобках. $ I - уникальный идентификатор из таблицы регистрации классов.)

Вот ответ jSon:

{"fee_amount":"25.00"}

Все они выглядят как отличные ответы, и я попробовал их все, но текстовое поле для суммы сбора не меняется.У меня нет ошибок в Firebug.Я озадачен

Ответы [ 2 ]

1 голос
/ 12 сентября 2011

Поскольку элемент вставляется в дерево DOM после загрузки документа, вы не можете использовать .bind().Вы должны использовать .live() или лучше .delegate()

   $(".fee_id_select").live("change",function ()
{  
        var $class_fee = 'class_fee[' + this.id + ']';

      jQuery.getJSON(
          'get_fee_json.php',
          {'id': this.value},
          update_fee_amount
      );
        function update_fee_amount(data, textStatus)
        {
            var fee = data || {}; 
      alert('the fee is ' + $class_fee + ' and the amount is ' + fee.fee_amount);                   
            jQuery('#' + $class_fee).val(fee.fee_amount || '');    
        }                                   
});

http://api.jquery.com/live/

http://api.jquery.com/delegate/

0 голосов
/ 12 сентября 2011

В данный момент $class_fee содержит class_fee[37], тогда как идентификатор, который вы хотите (вероятно), равен class_fee37.

Как-то так должно работать, я думаю

jQuery('#class_fee' + this.id).val(fee.fee_amount || '');

Если этого не произойдет, опубликуйте HTML-код для текстового поля.

...