2011-10-13 32 views
4

我有4个选择菜单,全部使用相同的产品。 (用户应该使用选择菜单将产品添加到发票中)。jQuery Selector:当我有多个选择菜单时,如何指定一个选择菜单?

因此,每个部分由选择菜单,数量文本字段和价格文本字段组成。但我有四个人在同一页面。

每当我从选择菜单中选择产品时,我想更改数量和价格。但更具体一点,我只想知道,如何找出哪个选择菜单被点击。

如果选择菜单有一类产品(.product),当我选择产品时,所有部分都会受到影响。但我只想影响特定的选择菜单部分。

$(".product").change(function(event){ 
    alert('product picked'); // testing 
}); 

我不能只追加一个数字,像这样:product1,product2,product3。因为那时在javascript文件我会写4个不同的功能

$(".product1").change(function(event){, 
$(".product2").change(function(event){, etc. 

我知道这是很基本的,但我需要刷新我的jQuery的东西。

这是一些HTML格式。我仅包含产品选择菜单和数量文本字段以简化操作。

<div class="item"> 
<p> 
    Product: 
    <select class="product" id="invoice_line_items_attributes_0_item_id" name="invoice[line_items_attributes][0][item_id]"><option value="1" data-defaultquantity="1">WP setup</option> 
    <option value="2" data-defaultquantity="1">WordPress Theme Design</option> 
    <option value="3" data-defaultquantity="1">WHE/yr</option> 
    <option value="4" data-defaultquantity="1">WHE/mo</option></select> 
</p> 

Qty: <input class="quantity" id="invoice_line_items_attributes_0_quantity" name="invoice[line_items_attributes][0][quantity]" size="30" type="text" value="1"><br> 
</div><hr> 

<div class="item"> 
<p> 
    Product: 
    <select class="product" id="invoice_line_items_attributes_1_item_id" name="invoice[line_items_attributes][1][item_id]"><option value="1" data-defaultquantity="1">WP setup</option> 
    <option value="2" data-defaultquantity="1">WordPress Theme Design</option> 
    <option value="3" data-defaultquantity="1">WHE/yr</option> 
    <option value="4" data-defaultquantity="1">WHE/mo</option></select> 
</p> 
Qty: <input class="quantity" id="invoice_line_items_attributes_1_quantity" name="invoice[line_items_attributes][1][quantity]" size="30" type="text" value="1"><br> 
</div><hr> 
+0

你可以发布你的HTML吗? – jbabey

+0

谢谢jbabey。添加了HTML。 – leonel

回答

1
$(".product").change(function(event){ 
    $(this).closest(".section").find(".quantity").val("somevalue"); 
    $(this).closest(".section").find(".price").val("somevalue"); 
}); 
+0

我结束了使用这个答案,因为有多个选择菜单。如果在多个选择菜单中选择了相同的产品,则不需要按ID选择菜单,而需要通过最近的选择。 – leonel

9

在事件处理程序,this必将给相关<select>元素。

$(".product").change(function(event){ 
    alert($(this).attr('name')); // name of <select> element changed 
}); 

一个方便的技巧是使用“数据”属性涉及类似的东西<select>到其他领域。也就是说,你可以这样做存储相关领域的“ID”的数据属性,这样的处理可以找到现场乱用:

<select name='whatever' data-quantity-id="whatever" data-price-id="whatever"> 
    <option ... > 
</select> 

然后在处理程序:

$('.product').change(function(event) { 
    var $quantity = $('#' + $(this).data('quantityId')); 
    var $price = $('#' + $(this).data('priceId')); 

    // ... 
}); 
+0

删除了我的答案,与您的答案类似。很好的答案。 – sirmdawg

+0

如果你想将$(this)传递给子函数,你可以使用subfunction.call($(this),more_args ...)。可能有帮助。 –

+0

谢谢它确实给了我关于数据属性的想法。我最终使用了Keith的答案,因为我有多个选择菜单,用户可能会在多个选择菜单中选择相同的产品。所以我不能真正使用ID的。但是我可以看到这对于一个选择菜单的情况非常有用,它更加清晰和简洁。 – leonel

相关问题