【问题标题】:How can i disable a select2 drop down如何禁用 select2 下拉菜单
【发布时间】:2016-04-13 19:13:34
【问题描述】:

我想禁用 woocommerce 结帐页面上的 select2 下拉菜单。我希望用户不能从结帐页面上的下拉菜单中更改国家/地区

我不想隐藏字段(国家),只想禁用下拉菜单

这就是 html 查找下拉菜单的方式

<div class="select2-drop select2-display-none select2-with-searchbox select2-drop-active" style="left: 92.5px; width: 556px; top: 668px; bottom: auto; display: block;" id="select2-drop">   

    <div class="select2-search">      
        <label for="s2id_autogen1_search" class="select2-offscreen">Country *</label>       
        <input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" class="select2-input" role="combobox" aria-expanded="true" aria-autocomplete="list" aria-owns="select2-results-1" id="s2id_autogen1_search" placeholder="" aria-activedescendant="select2-result-label-7">   
    </div>   
    <ul class="select2-results" role="listbox" id="select2-results-1">
        <li class="select2-results-dept-0 select2-result select2-result-selectable select2-highlighted" role="presentation">
            <div class="select2-result-label" id="select2-result-label-7" role="option">
            <span class="select2-match">
            </span>
            India
            </div>
        </li>
        <li class="select2-results-dept-0 select2-result select2-result-selectable" role="presentation">
            <div class="select2-result-label" id="select2-result-label-8" role="option">
            <span class="select2-match"></span>
            United Kingdom (UK)
            </div>
        </li>
    </ul>
</div>

请帮忙

【问题讨论】:

  • @ArcaneCraeda 嘿,感谢您的帮助,但是这只会从结帐页面中删除国家/地区字段。而且我相信客户会说他们希望国家/地区字段存在但希望将其禁用.. :(无论如何谢谢,,,
  • 我明白了。您可以在“特定国家/地区”字段的“WooCommerce 设置”>“常规设置”中将商店设置为仅向一个国家/地区销售。查看我链接的答案下方的答案,如果有效,请报告。
  • 是的,事实并非如此,我正在向四个国家/地区销售产品.. 根据购物车中产品的类别自动选择国家/地区,每个国家/地区一个类别

标签: javascript jquery wordpress woocommerce select2


【解决方案1】:

你可以这样做......

function rei_woocommerce_form_field_args($args, $key, $value) {

    if ($key == 'billing_country') {
        $args['custom_attributes'] = array('disabled'=>'disabled');

    }
    return $args;
}
add_filter('woocommerce_form_field_args', 'rei_woocommerce_form_field_args', 10, 3);

将其添加到您的functions.php...

我希望您意识到禁用的表单字段不会包含在 POST / GET 数据中。

如果你真的需要这个,我们可以为选择添加具有相同名称和值的额外隐藏输入..现在所有在一起,应该是这样的..

function rei_woocommerce_form_field_args($args, $key, $value) {

    if (($key == 'billing_country') && is_checkout()) {
        $args['custom_attributes'] = array('disabled'=>'disabled');
    }
    return $args;
}
add_filter('woocommerce_form_field_args', 'rei_woocommerce_form_field_args', 10, 3);

function rei_woocommerce_form_field_country($field, $key, $args, $value){

    if (($key == 'billing_country') && is_checkout()) {
        $field .= '<input type="hidden" name="' . esc_attr( $key ) . '" value="' . esc_attr( $value ) . '" />';
    }
    return $field;
}

add_filter('woocommerce_form_field_country','rei_woocommerce_form_field_country', 10, 4);

另一个注意事项是,即使您可以禁用选择,任何有知识的人都可以轻松删除浏览器中的禁用属性。

【讨论】:

  • 嘿,谢谢,我试过你的代码,它完全符合我的要求,我也可以使用 js 实现这一点。但现在只有我知道禁用的表单字段不会包含在 POST / GET 数据中。所以那时一切都没有用了。再次感谢
  • 您可以添加具有相同名称和值的隐藏输入.. 将包含在 get 或 post 中
【解决方案2】:

您可以使用的两种解决方法

  1. 在 country 字段上方添加一个透明层,并为其赋予更高的 z-index。
  2. 使用 JQuery 并返回 false;当 onClick 和 onSelect 事件被调用时。

【讨论】:

  • 第一个看起来不错,我试试看告诉你,谢谢
  • @user3848698 不客气,如果您需要任何帮助,请告诉我。
【解决方案3】:

在输入中添加disabled 属性,如下所示。

<input type="text" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" class="select2-input" role="combobox" aria-expanded="true" aria-autocomplete="list" aria-owns="select2-results-1" id="s2id_autogen1_search" placeholder="" aria-activedescendant="select2-result-label-7" disabled>

【讨论】:

  • 这不适用于已初始化且已激活的 select2 下拉菜单。
猜你喜欢
  • 2017-08-14
  • 1970-01-01
  • 2021-10-14
  • 1970-01-01
  • 1970-01-01
  • 2015-08-17
  • 1970-01-01
  • 1970-01-01
  • 2018-08-18
相关资源
最近更新 更多