0

我有个问题。
一个数组会从中返回一些动态数据。

<?php 
foreach($ItemArray as $key => $value) {
    echo '
    <tr><td height="30" valign="middle">'.$value['nr'].'</td>
    <td valign="middle">'.$value['product'].'</td>
    <td valign="middle">'.$value['describe'].'</td>
    <td valign="middle" id="price_'.$key.'">'.$value['price'].'</td>
    <td valign="middle" class="box_darker" id="amount_'.$key.'">
    <input name="Field_Amount_'.$key.'" id="Field_Amount_'.$key.'" class="Field_Amount" type="text" /></td>
    <td valign="middle" id="price_'.$key.'">$key</td></tr>'; }
;?>  

现在我会测试当点击属于字段(td/price)时该值是否返回正确的值

$(document).on('click', '[id^=price_]', function(){
var Amount = $('[id^=Field_Amount_]').val();
alert(Amount);
});  

但是不要介意我点击的每一行中的哪个字段(td/price),它只提醒我第一行的值!也许是因为数据动态加载?

对不起,糟糕的英语。

4

3 回答 3

5

那是因为您也对全局范围执行了第二次搜索,val()并将返回第一个元素的值。改用$(this).parent().find()

$(document).on('click', '[id^=price_]', function(){
    var Amount = $(this).parent().find('[id^=Field_Amount_]').val();
    alert(Amount);
});  

或者,您还应该能够使用.closest()

$(document).on('click', '[id^=price_]', function(){
    var Amount = $(this).closest('[id^=Field_Amount_]').val();
    alert(Amount);
}); 
于 2013-04-18T11:47:33.187 回答
2

您的触发事件工作正常,因为每一行都会对点击做出反应。

“错误”的是 Field_amount 的选择器。这总是选择第一个 Field_Amount_ 因为选择器在整个页面上工作。

尝试使用.closest()函数:

$(document).on('click', '[id^=price_]', function(){
    var Amount = $(this).closest('[id^=Field_Amount_]').val();
    alert(Amount);
});
于 2013-04-18T11:48:53.987 回答
1

尝试这个

$(document).on('click', '[id^=price_]', function(){
    var key = $(this).attr('id').split('price_');
    var amount = $("#Field_Amount_"+key[1]).val();
});
于 2013-04-18T12:01:37.233 回答