今天早上你非常乐于助人,我认为我可以在这方面得到帮助。我在表中动态创建了行,一个字段是一个下拉列表来选择费用类型。当这个改变时,我想用$$金额更新同一行中的一个字段。我从警报中收到了正确的费用和正确的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中没有任何错误。我很困惑。
答案 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 || '');
}
});
答案 1 :(得分:0)
目前,$class_fee
包含class_fee[37]
,而您想要的ID(可能)为class_fee37
。
这样的事情应该有用,我想
jQuery('#class_fee' + this.id).val(fee.fee_amount || '');
如果没有,请发布文本框的HTML。