我有以下形式(下面),它有一个隐藏的输入标记。在表单提交和响应回来时,我想更改该隐藏输入名称的名称,使其值为“__REMOVE__”。然后再次提交表单的响应,我希望它返回到“__ADD__”,依此类推。但是代码对我不起作用,名称=“__ ADD__”从不在表单上更改。我对jQuery很新,所以请原谅我的无知。注意,__BRONZE__的值永远不应该改变 - 后端PHP要求名称改变。
形式:
<form action="cart.php" method="post" class="cart-ajax">
<input type="hidden" name="__ADD__" value="__BRONZE__" />
<br><button type="submit" class="add-more-top dark cart-button-eight">Add to Cart</button>
<div class="cart-ajax-response"></div>
</form>
jQuery的:
$(document).ready(function() {
// code here snipped out to keep this question short
// Shopping Cart Form
$("form.cart-ajax").submit(function(e) {
e.preventDefault();
var form = $(this);
// update the submit buttons text on form submission
if(form.find('input:hidden').attr('name', '__ADD__'))
{
form.find('button:submit').html('Adding...');
}
else if(form.find('input:hidden').attr('name', '__REMOVE__'))
{
form.find('button:submit').html('Removing...');
}
$.post(form.attr('action'), form.serialize(),
function(data) {
// update the submit buttons text after successful response
// update the hidden form field with the opposite of the current value
if(form.find('input:hidden').attr('name') == '__ADD__')
{
form.find('button:submit').html('Remove');
form.find('input:hidden').attr('name', '__REMOVE__');
}
else if(form.find('input:hidden').attr('name') == '__REMOVE__')
{
form.find('button:submit').html('Add');
form.find('input:hidden').attr('name', '__ADD__');
}
// do something with the returned data - used in cart-ajax-response div
form.find('.cart-ajax-response').empty().html(data.aResults[0]);
}, 'json');
});
}); // <-- document ready
答案 0 :(得分:4)
if(form.find('input:hidden').attr('name', '__ADD__'))
没有按你的想法行事。您实际上是在设置该字段的名称,而不是询问它是否存在。
使用
if(form.find('input[name="__ADD__"]').length)
并注意.length
获取整数。如果没有它,您将返回一个对象,即使长度为0也是如此。
但是,请看一下这个http://jsfiddle.net/3xTfX/2/ - 同样的事情,更少的代码