下拉列表中的更改会更新同一动态创建的行中的文本框

时间:2011-09-12 01:59:33

标签: jquery bind

今天早上你非常乐于助人,我认为我可以在这方面得到帮助。我在表中动态创建了行,一个字段是一个下拉列表来选择费用类型。当这个改变时,我想用$$金额更新同一行中的一个字段。我从警报中收到了正确的费用和正确的ID(“费用是class_fee [37],金额是225.00”),但是带有费用$$的文本框没有更新。 文本框ID为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 || '');    
        }                                   
});

以下是foreach循环中的实际HTML:

            <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是类注册表中的唯一ID号。)

这是一个jSon回复:

{"fee_amount":"25.00"}

这些看起来都很棒,而且我已经尝试了所有这些,但费用金额的文本框并没有改变。我在Firebug中没有任何错误。我很困惑。

2 个答案:

答案 0 :(得分:1)

因为在文档加载后元素被注入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/

答案 1 :(得分:0)

目前,$class_fee包含class_fee[37],而您想要的ID(可能)为class_fee37

这样的事情应该有用,我想

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

如果没有,请发布文本框的HTML。