繁体   English   中英

在多模式弹出窗口中更改默认单选按钮选中属性

[英]Change default radio buttons checked attribute on multi modal pop in

默认情况下,Woocommerce 为我的产品自定义布局提供了选项。 单击如下按钮

点击一个按钮

我得到一个带有选项默认产品的弹出式模式我的弹出模式

然而,无论网络用户点击大尺寸,默认选择始终是小尺寸。 我附上了演示代码来展示问题,我将是解决方案。 我想使用 JS 删除页面加载时检查的默认值。 然后单击按钮,大小将通过使用 html 上的数据键确定主餐选择。

问题:我的大按钮单击有效,但小按钮单击不会更改选中的值。 您的帮助或不同的看法将不胜感激。

 window.onload = removePreSelection(); const clickBtns = Array.from(document.querySelectorAll('.defaultbtn')); clickBtns.forEach(clickBtn => clickBtn.addEventListener('click', clickedBtnSelect)); //Remove the default selection of radio buttons on page. function removePreSelection() { const inputs = document.querySelectorAll('input[name=attribute_pa_sizes]:checked'); for (let i = 0; i < inputs.length; i++) { const element = inputs[i]; element.removeAttribute("checked"); } } //Filter the values of the clicked button. function clickedBtnSelect(e) { removePreSelection(); const bentoSize = e.target.dataset.bento; const bentoModal = e.target.dataset.target.replace(/([#]+)/gi, ''); const modalInputValue = document.querySelector('input[value=' + bentoSize + ']'); console.log(modalInputValue); //set the attribute to checked. modalInputValue.setAttribute("checked", "checked");; }
 <div class="show-pricing"> <p class="variable-pricing"> <span>Large: 27500</span> <button class="btn defaultbtn" data-target="#myModal1900" data-toggle="modal" data-bento="large" type="button">Large</button> </p> <p class="variable-pricing"> <span>Small: 23000</span> <button class="btn defaultbtn" data-target="#myModal1908" data-toggle="modal" data-bento="small" type="button">Small</button> </p> <!-- Modal --> <div aria-labelledby="myModalLabel" class="modal fade" id="myModal1900" role="dialog" tabindex="-1"> <div class="variations"> <div class="col-md-4"> <h3 class="variations-options-head">Large Modal selected</h3> <div class="value"> <fieldset> <p> <input id="pa_sizes" name="attribute_pa_sizes" type="radio" value="large"> <span class="radio-span">Large</span> </p> <p> <input checked="checked" id="pa_sizes" name="attribute_pa_sizes" type="radio" value="small"> <span class="radio-span">Small</span> </p> </fieldset> </div> </div> </div> </div> <!-- Modal 2 --> <div aria-labelledby="myModalLabel" class="modal fade" id="myModal1908" role="dialog" tabindex="-1"> <div class="variations"> <div class="col-md-4"> <h3 class="variations-options-head">Small modal selected</h3> <div class="value"> <fieldset> <p> <input id="pa_sizes" name="attribute_pa_sizes" type="radio" value="large"> <span class="radio-span">Large</span> </p> <p> <input checked="checked" id="pa_sizes" name="attribute_pa_sizes" type="radio" value="small"> <span class="radio-span">Small</span> </p> </fieldset> </div> </div> </div> </div> </div>

试试这个用 jQuery 制作的工作版本,更紧凑和高效:

 (function($){ // variables initialization var a = 'button[data-bento^="small"]', b = 'button[data-bento^="large"]', c = 'input[value^="small"]', d = 'input[value^="large"]'; $(a).click(function(){ var e = $(this).attr('data-target') + ' ' + c; console.log($(this).attr('data-target')); $(e).prop('checked', true); }); $(b).click(function(){ var f = $(this).attr('data-target') + ' ' + d; console.log($(this).attr('data-target')); $(f).prop('checked', true); }); })(jQuery);
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="show-pricing"> <p class="variable-pricing"> <span>Large: 27500</span> <button class="btn defaultbtn" data-target="#myModal1900" data-toggle="modal" data-bento="large" type="button">Large</button> </p> <p class="variable-pricing"> <span>Small: 23000</span> <button class="btn defaultbtn" data-target="#myModal1908" data-toggle="modal" data-bento="small" type="button">Small</button> </p> <!-- Modal --> <div aria-labelledby="myModalLabel" class="modal fade" id="myModal1900" role="dialog" tabindex="-1"> <div class="variations"> <div class="col-md-4"> <h3 class="variations-options-head">Large Modal selected</h3> <div class="value"> <fieldset> <p> <input id="pa_sizes" name="attribute_pa_sizes" type="radio" value="large"> <span class="radio-span">Large</span> </p> <p> <input checked="checked" id="pa_sizes" name="attribute_pa_sizes" type="radio" value="small"> <span class="radio-span">Small</span> </p> </fieldset> </div> </div> </div> </div> <!-- Modal 2 --> <div aria-labelledby="myModalLabel" class="modal fade" id="myModal1908" role="dialog" tabindex="-1"> <div class="variations"> <div class="col-md-4"> <h3 class="variations-options-head">Small modal selected</h3> <div class="value"> <fieldset> <p> <input id="pa_sizes" name="attribute_pa_sizes" type="radio" value="large"> <span class="radio-span">Large</span> </p> <p> <input checked="checked" id="pa_sizes" name="attribute_pa_sizes" type="radio" value="small"> <span class="radio-span">Small</span> </p> </fieldset> </div> </div> </div> </div> </div>

你可以直接点击“运行代码片段”按钮来查看它的运行情况……

测试和工作。


您还可以将其嵌入到挂钩函数中,如下所示:

add_filter( 'wp_footer','custom_product_title_script' );
function custom_product_title_script(){
    if( ! is_checkout() || is_admin() ) return; // only on single product pages
    ?>
        <script type="text/javascript">
        // HERE goes the jQuery script
        </script>
    <?php
}

代码位于您的活动子主题(或主题)的 function.php 文件中……

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM