我正在尝试在更改购物车数量时禁用“继续结帐”按钮。为此,我使用jQuery将一些CSS注入到继续按钮(见下文)。
我目前使用的代码有效,但它只适用于首次更新购物车。如果用户随后对其购物车进行了几秒钟的编辑,那么定价到结帐按钮将保持活动状态。
这个棘手的部分是针对正确的元素,好像这些ID是由WooCommerce动态创建的,因此每次加载页面时都会更改。
// Disable proceed button
$( ".product-quantity > .quantity > input" ).change( function() {
$( 'a.checkout-button' ).css({
'pointer-events': 'none',
'opacity': '0.25'
});
});
$( '.actions > input[type="submit"]' ).click( function() {
$( 'a.checkout-button' ).css({
'pointer-events': 'auto',
'opacity': '1'
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table class="shop_table shop_table_responsive cart woocommerce-cart-form__contents" cellspacing="0">
<thead>
<tr>
<th class="product-remove"> </th>
<th class="product-thumbnail"> </th>
<th class="product-name">Product</th>
<th class="product-price">Price</th>
<th class="product-quantity">Quantity</th>
<th class="product-subtotal">Total</th>
</tr>
</thead>
<tbody>
<tr class="woocommerce-cart-form__cart-item cart_item">
<td class="product-remove">
<a href="http://mowgli.dev/basket/?remove_item=0039818e7547d3314205171d9ec650da&_wpnonce=09541aba5e" class="remove" aria-label="Remove this item" data-product_id="166" data-product_sku="">×</a>
</td>
<td class="product-thumbnail">
<a href="http://mowgli.dev/product/gift-cards/?attribute_choose-value=%C2%A3100.00">
<img src="//mowgli.dev/wp-content/uploads/2017/09/PR-Gift-Card-180x180.png" class="attachment-shop_thumbnail size-shop_thumbnail wp-post-image" alt="" srcset="//mowgli.dev/wp-content/uploads/2017/09/PR-Gift-Card-180x180.png 180w, //mowgli.dev/wp-content/uploads/2017/09/PR-Gift-Card-150x150.png 150w, //mowgli.dev/wp-content/uploads/2017/09/PR-Gift-Card-300x300.png 300w" sizes="(max-width: 180px) 100vw, 180px" width="180" height="180">
</a>
</td>
<td class="product-name" data-title="Product">
<a href="http://mowgli.dev/product/gift-cards/?attribute_choose-value=%C2%A3100.00">Gift Cards - £100.00</a> </td>
<td class="product-price" data-title="Price">
<span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">£</span>100.00</span> </td>
<td class="product-quantity" data-title="Quantity">
<div class="quantity">
<label class="screen-reader-text" for="quantity_59f058ed51782">Quantity</label>
<input id="quantity_59f058ed51782" class="input-text qty text" step="1" min="0" max="" name="cart[0039818e7547d3314205171d9ec650da][qty]" value="21" title="Qty" size="4" pattern="[0-9]*" inputmode="numeric" type="number">
</div>
</td>
<td class="product-subtotal" data-title="Total">
<span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">£</span>2,100.00</span> </td>
</tr>
<tr>
<td colspan="6" class="actions">
<input class="button" name="update_cart" value="Update basket" disabled="" type="submit">
<input id="_wpnonce" name="_wpnonce" value="09541aba5e" type="hidden"><input name="_wp_http_referer" value="/basket/" type="hidden">
</td>
</tr>
</tbody>
</table>
<div class="wc-proceed-to-checkout">
<a href="http://mowgli.dev/checkout/" class="checkout-button button alt wc-forward">
Proceed to checkout</a>
</div>
我已经检查了SO上的以下帖子,这些帖子对我没有帮助:
答案 0 :(得分:1)
我看到当您更新购物车时,新输入来自AJAX,因此如果您想要点击事件触发,您必须使用on()
,当您要点击它的元素时,文件中并非最初。
像动态生成的内容或AJAX中的新元素。
每次输入更改时,也可以禁用道具。
// Disable proceed button
$(document).on("change", '.product-quantity > .quantity > input', function() {
$('a.checkout-button').css({
'pointer-events': 'none',
'opacity': '0.25'
});
});
$(document).on("click", '.actions > input[type="submit"]', function() {
$('a.checkout-button').css({
'pointer-events': 'auto',
'opacity': '1'
});
$(this).prop('disabled', true);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table class="shop_table shop_table_responsive cart woocommerce-cart-form__contents" cellspacing="0">
<thead>
<tr>
<th class="product-remove"> </th>
<th class="product-thumbnail"> </th>
<th class="product-name">Product</th>
<th class="product-price">Price</th>
<th class="product-quantity">Quantity</th>
<th class="product-subtotal">Total</th>
</tr>
</thead>
<tbody>
<tr class="woocommerce-cart-form__cart-item cart_item">
<td class="product-remove">
<a href="http://mowgli.dev/basket/?remove_item=0039818e7547d3314205171d9ec650da&_wpnonce=09541aba5e" class="remove" aria-label="Remove this item" data-product_id="166" data-product_sku="">×</a> </td>
<td class="product-thumbnail">
<a href="http://mowgli.dev/product/gift-cards/?attribute_choose-value=%C2%A3100.00"><img src="//mowgli.dev/wp-content/uploads/2017/09/PR-Gift-Card-180x180.png" class="attachment-shop_thumbnail size-shop_thumbnail wp-post-image" alt="" srcset="//mowgli.dev/wp-content/uploads/2017/09/PR-Gift-Card-180x180.png 180w, //mowgli.dev/wp-content/uploads/2017/09/PR-Gift-Card-150x150.png 150w, //mowgli.dev/wp-content/uploads/2017/09/PR-Gift-Card-300x300.png 300w" sizes="(max-width: 180px) 100vw, 180px" width="180" height="180">
</a>
</td>
<td class="product-name" data-title="Product">
<a href="http://mowgli.dev/product/gift-cards/?attribute_choose-value=%C2%A3100.00">Gift Cards - £100.00</a> </td>
<td class="product-price" data-title="Price">
<span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">£</span>100.00</span>
</td>
<td class="product-quantity" data-title="Quantity">
<div class="quantity">
<label class="screen-reader-text" for="quantity_59f058ed51782">Quantity</label>
<input id="quantity_59f058ed51782" class="input-text qty text" step="1" min="0" max="" name="cart[0039818e7547d3314205171d9ec650da][qty]" value="21" title="Qty" size="4" pattern="[0-9]*" inputmode="numeric" type="number">
</div>
</td>
<td class="product-subtotal" data-title="Total">
<span class="woocommerce-Price-amount amount"><span class="woocommerce-Price-currencySymbol">£</span>2,100.00</span>
</td>
</tr>
<tr>
<td colspan="6" class="actions">
<input class="button" name="update_cart" value="Update basket" disabled="" type="submit">
<input id="_wpnonce" name="_wpnonce" value="09541aba5e" type="hidden">
<input name="_wp_http_referer" value="/basket/" type="hidden"> </td>
</tr>
</tbody>
</table>
<div class="wc-proceed-to-checkout">
<a href="http://mowgli.dev/checkout/" class="checkout-button button alt wc-forward">
Proceed to checkout</a>
</div>
答案 1 :(得分:0)
如果更改并点击()绑定,您使用的名称为&#34; direct&#34;绑定只会将处理程序附加到已存在的元素。它不会受到未来创建的元素的约束。要做到这一点,你必须创建一个&#34;委托&#34;使用on()进行绑定,如下面的代码
'$(&#34;按钮&#34)。单击(函数(){ $(&#34; h2&#34;)。html(&#34;点击我
&#34;) });
$(&#34; .test&#34;)。live(&#39; click&#39;,function(){ 提醒(&#39;你点击了我!&#39;); });`
答案 2 :(得分:0)
为与当前选择器匹配但
的所有元素附加事件处理程序.live()方法已弃用。使用.on()附加事件处理程序。旧版jQuery的用户应该使用.delegate()而不是.live()。
此方法提供了将委托事件处理程序附加到页面的文档元素的方法,这可以在将内容动态添加到页面时简化事件处理程序的使用。有关详细信息,请参阅.on()方法中有关直接事件与委托事件的讨论。
根据其后继者重写.live()方法很简单;这些是用于所有三种事件附件方法的等效调用的模板:
$( selector ).live( events, data, handler ); // jQuery 1.3+
$( document ).delegate( selector, events, data, handler ); // jQuery 1.4.3+
$( document ).on( events, selector, data, handler ); // jQuery 1.7+