jQuery将内容添加到输入框的值

6

这是我在表单中遇到的最后一个问题(希望如此)。

我的目标是将变量大小附加到名为my-item-name的隐藏输入中。

我尝试添加以下内容:

form.find('[name=my-item-name]').append(size.val());

但是它没有起作用。

将size值附加到输入框的正确方法是什么?

<form method="post" action="" class="jcart">
    <fieldset>
        <input type="hidden" name="jcartToken" value="13823c48f896c49403465fcce9f135ac" />

        <input type="hidden" name="my-item-id" value="12" />
        <input type="hidden" name="my-item-price" value="15.99" />
        <input type="hidden" name="my-item-url" value="http://yahoo.com" />
        <input type="hidden" name="my-item-name" value="Operation Braveheart hooded sweatshirt" />
        <ul>
            <li>
                <select name="my-select" id="foo12">
                    <option value='Small'>Small</option>
                    <option value='Medium'>Medium</option>
                    <option value='Large'>Large</option>
                    <option value='X-Large'>X-Large</option>
                </select>
            </li>
            <li>Price: $<span id="price12" class="price">15.99</span></li>
            <li>
                <label>Qty: <input type="text" name="my-item-qty" value="1" size="3" /></label>

            </li>
        </ul>

        <input type="submit" name="my-add-button" value="add to cart" class="button" />
    </fieldset>
</form>                
<script type="text/javascript">
    var item_prices_by_size12 = { "Small": { "Price": "15.99", "ItemId": "9-1" },"Medium": { "Price": "16.99", "ItemId": "9-2" },"Large": { "Price": "17.99", "ItemId": "9-3" },"X-Large": { "Price": "18.99", "ItemId": "9-4" }};
    $(function() {

        $('#foo12').change(function() {

            var form = $(this).parents('form');

            // Size is whatever the value the user has selected
            var size = $(this).val();

            // Determine the correct price and item ID based on the selected size
            var price12  = item_prices_by_size12[size].Price,
            itemId = item_prices_by_size12[size].ItemId;

            form.find('#price12').text(price12);

            form.find('[name=my-item-price]').val(price12);

            // Update the item ID
            form.find('[name=my-item-id]').val(itemId);

            form.find('[name=my-item-name]').append(size.val());

        });
    });
</script>

2
你说的“append”是什么意思? - Nicola Peluchetti
是的,你不是将一个值附加到输入中,而是使用selector.val('新值');设置它。 - Majid Fouladpour
如果这是一个购物车,你想要将多个产品发送到后端,那么你应该使用 my-item-id[]my-item-price[] 等。 - Majid Fouladpour
4个回答

5
如果您指的是拼接(concatenate):
  $('[name=my-item-name]').val($('[name=my-item-name]').val()+""+size);

(读取您的代码大小已经是对象的值,因此您无法调用 size.val()

5

append:"将参数指定的内容插入到匹配元素集合中每个元素的末尾。"

你想要做的是追加值,对吗?

var value = form.find('[name=my-item-name]').val();
form.find('[name=my-item-name]').val(value + size); 

那很准确。这正是我所想的,但不知道如何表达。 - AdRock
刚试了一下,它们都按照我的预期工作,但是在change()事件中,尺寸值并没有改变,而是在我做出选择后,将其连接到先前的尺寸值上,导致出现Small Medium Large而不是更改。我该如何在完成change事件后清除val? - AdRock

2

像这样做:

var prev= $('[name=my-item-name]').val()
$('[name=my-item-name]').val(prev+" "+size);

size已经是当前对象的值,因此您无法对其调用val()。 - Nicola Peluchetti

1
更好的解决方案是将值附加到表单输入框中:
var attachedValue = [];

//add element to attachedValue array
attachedValue.push(size.val());
$(element).val(attachedValue);

result: 6666,5555,2222   

// remove element from array;
// remove 5555 element from array
var index = attachedValue.indexOf(size.val());
if (index > -1) {
    attachedValue.splice(index, 1);
}
$(element).val(attachedValue);

result 6666,2222

your form then would look like :
<input type="hidden" value="6666,2222" name="my-item-name">

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接