在特定页面上将复选框值设置为 true

Posted

技术标签:

【中文标题】在特定页面上将复选框值设置为 true【英文标题】:Set checkbox value to true on specific pages 【发布时间】:2021-10-14 21:44:28 【问题描述】:

我已经使用联系表 7 在每个产品页面上创建了一个产品查询表。表格包含每个产品的复选框,以帮助查询。如果用户在相应的产品页面上,如何自动将特定产品复选框设置为 true/on?

我在获取页面标题的表单中添加了一个动态隐藏字段。

联系表格&在每个复选框的名称字段中生成一个复选框数组name="products[]"

理想情况下,我希望脚本循环并选择与隐藏字段匹配的复选框,有人可以告诉我该怎么做吗?

下面是我当前的 jquery

        $( document ).ready(function() 
            var get_product_name = $('#product-name').val(); // hidden field value
            if(get_product_name == 'product-page-title')
            
              $('CHECKBOX_HERE').prop('checked', true);
            
        );

联系表格 7 生成的 html...

<span class="wpcf7-form-control-wrap page-title">
<input type="hidden" name="page-title" value="Product template" size="40" class="wpcf7-form-control wpcf7dtx-dynamictext wpcf7-dynamichidden" aria-invalid="false">
</span>

<span class="wpcf7-form-control-wrap products">
    <span class="wpcf7-form-control wpcf7-checkbox">
    
    <span class="wpcf7-list-item first"><label><input type="checkbox" name="products[]" value="Product One"><span class="wpcf7-list-item-label">Product One</span></label>
    </span> 
    <span class="wpcf7-list-item"><label><input type="checkbox" name="products[]" value="Product Two"><span class="wpcf7-list-item-label">Product Two</span></label>
    </span> 
    <span class="wpcf7-list-item"><label><input type="checkbox" name="products[]" value="Product Three"><span class="wpcf7-list-item-label">Product Three</span></label>
    </span> 
    <span class="wpcf7-list-item"><label><input type="checkbox" name="products[]" value="Product Four"><span class="wpcf7-list-item-label">Product Four</span></label>
    </span> 
    <span class="wpcf7-list-item last"><label><input type="checkbox" name="products[]" value="Product Five"><span class="wpcf7-list-item-label">Product Five</span></label>
    </span>

    </span>
</span>

如你所见,我的技能有限

【问题讨论】:

【参考方案1】:

选择器不正确,您正在尝试选择具有 id 'product-name' 的输入元素,因此您正在搜索的输入如下所示:

<input id="product-name">

但是你的 HTML 中没有这个,所以你应该为这个元素创建一个选择器,这是你正在寻找的元素:

<input type="hidden" name="page-title" value="Product template" size="40" class="wpcf7-form-control wpcf7dtx-dynamictext wpcf7-dynamichidden" aria-invalid="false">

所以选项 1,是更改选择器 $('#product-name').val();对于这个选择器:

$('input[type="hidden"]').val();

但这太笼统了,这样做可能会选择超过 1 种隐藏的输入类型,如果你想要更具体的东西,你可以使用 html 元素中的现有类来给你一个不同的值:

<input type="hidden" name="page-title" value="Product template" size="40" class="wpcf7-form-control wpcf7dtx-dynamictext wpcf7-dynamichidden" aria-invalid="false">

然后像这样调用选择器:

$('.wpcf7-dynamichidden').val()

同样,这也是非常通用的,它可以选择页面中具有类 wpcf7-dynamichidden 的所有字段,因此最好的方法是您可以将 HTML 更改为具有特定 id或特定名称或特定类,您可以稍后将选择器 $('#product-name').val() 更改为如下内容:

$('input[type="hidden"]').val(); //No need to change anything in the HTML, too generic though
$('.wpcf7-dynamichidden').val(); //No need to change anything in the HTML, also generic and can select more than one input element
$('#yourIdAddedToTheElement').val(); //Requires adding an id to your HTML element like <input id="yourIdAddedToTheElement" type="hidden"> 

毕竟,如果你只是想试试这段代码,它可以工作:

$(document).ready(function() 
        var get_product_name = $('.wpcf7-dynamichidden').val();
        if(get_product_name == 'product-page-title')
        
          $('input[type="checkbox"]').prop('checked', true); //Again this will select all checkboxes so you need to speficy in your selector which one to put to true
        
    );

希望这会有所帮助。

【讨论】:

感谢您的帮助,这使我弄清楚了我在寻找什么,请参阅下面的答案。我可能没有在我原来的帖子中解释清楚。【参考方案2】:

更新!!这行得通!

    检查包含页面标题的隐藏字段值

    检查复选框值数组

    循环检查复选框的值

    检查是否有任何复选框值与隐藏字段匹配

    将该复选框设置为 true

         $( document ).ready(function() 
             var get_product_name = $('.wpcf7-dynamichidden').val(); // Check hidden field value which contains page title
             //console.log(get_product_name);
             var checkboxValues = $('.wpcf7-list-item label input:checkbox').map(function() 
                 return $(this).val();
             ).get(); //Checks array of checkbox values
             //console.log(checkboxValues);
    
             $.each(checkboxValues, function(i, val) // Loop though checkbox values
                if (i = get_product_name)  // Check if any checkbox values match the hidden field
                 console.log(i);
                 $(".wpcf7-list-item label input:checkbox[value='" + get_product_name + "']").prop('checked', true); // Set that checkbox to true
                
             );
         );
    

【讨论】:

以上是关于在特定页面上将复选框值设置为 true的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 上将 True 设置为 BooleanField 的默认值?

选中框时复选框值不会更改

Inno Setup:将桌面图标复选框的默认值设置为 true

选中时使用特定值的复选框显示数据

C# 如何将特定的二进制位设置为 0 或 1?

当multiselect选项设置为true时,为复选框列添加自定义格式化程序