Флажок и числовые поля на огромном - PullRequest
5 голосов
/ 06 июля 2019

Я использую грозный плагин на WordPress, который генерирует отправку формы. Там будет несколько флажков и числовых полей, точно так же, как на https://www.mql5.com/en/market/new_product/mt4.

На этом сайте - в поле " Цена " - по умолчанию в поле флажка установлено значение: " Бесплатно ". Когда пользователь снимает галочку с этого, ниже будут показаны другие флажки.

Так как же достичь этой цели с помощью грозного на WordPress?

Кстати, ниже HTML-код по этой ссылке выше:

<div class="line" style="padding-bottom: 2px;">
<div class="label">
<label for="Price">Price:</label>
</div>
<div class="field_input">
<input type="checkbox" id="priceFree" name="isFree" style="margin-top:2px;width:16px;height:16px;vertical-align:middle;" checked onclick="onPriceCheckChanged(this)" />
<label for="checkFree" style="color: #626363;vertical-align:middle;">Free</label>
</div>
</div>
<div class="line" style="padding-top: 2px;">
<div class="label" style="padding-top: 2px;">

</div>
<div class="field_input">
<div style="margin-bottom:5px;">
    <div class="inputWrapper" style="width:100px;display:inline-block;*display:inline;*zoom:1;*margin-right:5px;line-height:22px;vertical-align:middle;">
        <input data-old="" id="PriceRaw" name="PriceRaw" style="text-align: right; padding-right:2px;" type="text" value="0.00" />
    </div>

    <span id="PriceAdditional" style="color:#626363;display:inline-block;*display:inline;*zoom:1;line-height:22px;vertical-align:middle;">
        USD
        <input type="checkbox" id="checkPrice" name="checkPrice" style="margin-top:2px;width:16px;height:16px;vertical-align:middle;" onclick="onPriceCheckChanged(this)" />
        <label for="checkPrice" style="color: #626363;vertical-align:middle;">for unlimited use</label>
    </span>
    <div>
        <script type='text/javascript' id='validate_PriceRaw'>/*<![CDATA[*/ mqGlobal.AddOnReady(function() {V.push(['PriceRaw',10,'Invalid price format. Please enter number',CheckProductPrice]);});mqGlobal.AddOnReady(function() {V.push(['PriceRaw',10,'Invalid price',CheckProductPriceValue]);}); /*]]>*/</script>
    </div>
</div>
<div style="margin-bottom:5px;">
    <div class="inputWrapper" style="width:100px;display:inline-block;*display:inline;*zoom:1;*margin-right:5px;line-height:22px;vertical-align:middle;">
        <input data-old="" id="Price4Raw" name="Price4Raw" style="text-align: right; padding-right:2px;" type="text" value="0.00" />
    </div>

    <span id="Price4Additional" style="color:#626363;display:inline-block;*display:inline;*zoom:1;line-height:22px;vertical-align:middle;">
        USD
        <input type="checkbox" id="checkPrice4" name="checkPrice4" style="margin-top:2px;width:16px;height:16px;vertical-align:middle;" onclick="onPriceCheckChanged(this)" />
        <label for="checkPrice4" style="color: #626363;vertical-align:middle;">1 month rent</label>
    </span>
    <div>
        <script type='text/javascript' id='validate_Price4Raw'>/*<![CDATA[*/ mqGlobal.AddOnReady(function() {V.push(['Price4Raw',10,'Invalid price format. Please enter number',CheckProductPrice]);});mqGlobal.AddOnReady(function() {V.push(['Price4Raw',10,'Invalid price',CheckProductSubscribePriceValue]);}); /*]]>*/</script>
    </div>
</div>
<div style="margin-bottom:5px;">
    <div class="inputWrapper" style="width:100px;display:inline-block;*display:inline;*zoom:1;*margin-right:5px;line-height:22px;vertical-align:middle;">
        <input data-old="" id="Price3Raw" name="Price3Raw" style="text-align: right; padding-right:2px;" type="text" value="0.00" />
    </div>

    <span id="Price3Additional" style="color:#626363;display:inline-block;*display:inline;*zoom:1;line-height:22px;vertical-align:middle;">
        USD
        <input type="checkbox" id="checkPrice3" name="checkPrice3" style="margin-top:2px;width:16px;height:16px;vertical-align:middle;" onclick="onPriceCheckChanged(this)" />
        <label for="checkPrice3" style="color: #626363;vertical-align:middle;">3 months rent</label>
    </span>
    <div>
        <script type='text/javascript' id='validate_Price3Raw'>/*<![CDATA[*/ mqGlobal.AddOnReady(function() {V.push(['Price3Raw',10,'Invalid price format. Please enter number',CheckProductPrice]);});mqGlobal.AddOnReady(function() {V.push(['Price3Raw',10,'Invalid price',CheckProductSubscribePriceValue]);}); /*]]>*/</script>
    </div>
</div>
<div style="margin-bottom:5px;">
    <div class="inputWrapper" style="width:100px;display:inline-block;*display:inline;*zoom:1;*margin-right:5px;line-height:22px;vertical-align:middle;">
        <input data-old="" id="Price2Raw" name="Price2Raw" style="text-align: right; padding-right:2px;" type="text" value="0.00" />
    </div>

    <span id="Price2Additional" style="color:#626363;display:inline-block;*display:inline;*zoom:1;line-height:22px;vertical-align:middle;">
        USD
        <input type="checkbox" id="checkPrice2" name="checkPrice2" style="margin-top:2px;width:16px;height:16px;vertical-align:middle;" onclick="onPriceCheckChanged(this)" />
        <label for="checkPrice2" style="color: #626363;vertical-align:middle;">6 months rent</label>
    </span>
    <div>
        <script type='text/javascript' id='validate_Price2Raw'>/*<![CDATA[*/ mqGlobal.AddOnReady(function() {V.push(['Price2Raw',10,'Invalid price format. Please enter number',CheckProductPrice]);});mqGlobal.AddOnReady(function() {V.push(['Price2Raw',10,'Invalid price',CheckProductSubscribePriceValue]);}); /*]]>*/</script>
    </div>
</div>
<div style="margin-bottom:5px;">
    <div class="inputWrapper" style="width:100px;display:inline-block;*display:inline;*zoom:1;*margin-right:5px;line-height:22px;vertical-align:middle;">
        <input data-old="" id="Price1Raw" name="Price1Raw" style="text-align: right; padding-right:2px;" type="text" value="0.00" />
    </div>

    <span id="Price1Additional" style="color:#626363;display:inline-block;*display:inline;*zoom:1;line-height:22px;vertical-align:middle;">
        USD
        <input type="checkbox" id="checkPrice1" name="checkPrice1" style="margin-top:2px;width:16px;height:16px;vertical-align:middle;" onclick="onPriceCheckChanged(this)" />
        <label for="checkPrice1" style="color: #626363;vertical-align:middle;">1 year rent</label>
    </span>
</div>
<div>

А это фрагмент javascript по этой ссылке выше:

function onPriceCheckChanged(priceCheck)
{
    var readonly = !priceCheck;
    var any = readonly || priceCheck.id == "priceFree";
    var checked = readonly || (any ? !priceCheck.checked : priceCheck.checked);
    var anyChecked = false;
    for(var i = 0; i < 5; i++)
    {
        var pc = $("checkPrice" + (i || ""));
        if(any || pc.id == priceCheck.id)
        {
            if(!readonly)
                pc.checked = checked;
            checkPriceCheck(pc);
        }
        if(pc.checked)
            anyChecked = true;
    }
    if(!readonly && priceCheck.id !== "priceFree" && priceCheck.checked)
    {
        $("priceFree").checked = false;
    }
    var actObj = $('MaxActivations');
    var actObjD = $('MaxActivationsDisabled');
    var feeObj = $('AffilationFee');
    if(!anyChecked)
    {
        if(feeObj)
        {
            oldFee = feeObj.value;
            feeObj.value = 0;
            feeObj.disabled = "disabled";
            feeObj.readonly = "readonly";
        }
        if(actObj && actObjD)
        {
            oldAct = actObj.value;
            actObj.value = 10;
            actObj.style.display = "none";
            actObjD.style.display = "inline";
        }
    }
    else
    {
        if(feeObj)
        {
            feeObj.value = oldFee;
            feeObj.disabled = null;
            feeObj.readonly = null;
        }
        if(actObj && actObjD)
        {
            actObj.value = oldAct;
            actObj.style.display = "inline";
            actObjD.style.display = "none";
        }
    }
}

* Обновление 1

  1. Если отмечен первый флажок, будут отключены другие параметры (по умолчанию)

enter image description here

  1. Первый флажок при снятии отметки, после чего будут включены другие опции для проверки или снятия отметки и могут также заполнять числовые поля

enter image description here

  1. Еще один вариант, когда один или несколько флажков сняты, тогда он также может заполнить числовые поля

enter image description here

* Update2 Вот полный исходный код с оригинального сайта: gist.github.com/pije76/6cb0a03d705b56f145cd0014da480f73

* Update3 Вот модифицированный код из ответа Салли:

(function($)
{
    $('input[type="number"]').prop('disabled', true);
    $(':checkbox#field_gratis-0').on('click', function()
    {
        $(':checkbox[id^="field_masaberlaku_"]').prop('checked', !this.checked).change();
    });

    $(':checkbox[id^="field_masaberlaku_"]').on('change', function()
    {
        var cont = $(this).closest('div.frm_form_field').prev('div.frm_form_field');
        cont.find('input[type="number"]').prop('disabled', this.disabled || !this.checked);
        $(':checkbox#field_gratis-0').prop("checked", false);
    });
})(jQuery);

Ответы [ 2 ]

2 голосов
/ 12 июля 2019

@ pije Хорошо, если вы используете Formidable, вам нужно использовать условные поля.Это позволит вам запускать показ / скрытие других полей в зависимости от ранее выбранных / проверенных полей: их документация довольно солидна для этого: https://formidableforms.com/knowledgebase/using-conditional-logic/

1 голос
/ 25 июля 2019

У меня нет Pro / платной версии Formidable Forms, которая поставляется с условной поддержкой ;но я опубликовал это «универсальное» решение jQuery / JavaScript, поскольку вы до сих пор не приняли никаких ответов ... и я надеюсь, что оно вам поможет.

Так что я даю вам только сценарий;Вы можете поместить его в нижний колонтитул темы (до </body> и не забывать теги <script> и </script>) или поместить его во внешний файл .js:

// ES5 version.
( function( $ ){
  // Disable the price field when the "Gratis" field or "masa berlaku" field is checked.
  $( ':checkbox[id^="field_masaberlaku_"]' ).on( 'change', function(){
    var disabled = $( ':checkbox#field_fm78o-0' ).is( ':checked' ) || ! this.checked;
    var cont = $( this ).closest( 'div.frm_form_field' ).prev( 'div.frm_form_field' );
    cont.find( 'input[type="number"]' ).prop( 'disabled', disabled );
  } );

  // Disable all the price and "masa berlaku" fields when the "Gratis" field is checked.
  $( ':checkbox#field_fm78o-0' ).on( 'change', function(){
    $( ':checkbox[id^="field_masaberlaku_"]' ).prop( 'disabled', this.checked ).change();
  } ).change();
} )( jQuery );

То естьТем не менее, это относится к разметке / HTML раздела Harga / Price, так как он в данный момент находится на http://korexindo.com/k-market/form-k-market/. Но вы можете в основном использовать приведенный выше код в качестве ссылки для аналогичных разделов в форме.И вот рабочая демонстрация:

// ESNext version.
( ( $ ) => {
  // Disable the price field when the "Gratis" field or "masa berlaku" field is checked.
  $( ':checkbox[id^="field_masaberlaku_"]' ).on( 'change', function(){
    const disabled = $( ':checkbox#field_fm78o-0' ).is( ':checked' ) || ! this.checked;
    const cont = $( this ).closest( 'div.frm_form_field' ).prev( 'div.frm_form_field' );
    cont.find( 'input[type="number"]' ).prop( 'disabled', disabled );
  } );

  // Disable all the price and "masa berlaku" fields when the "Gratis" field is checked.
  $( ':checkbox#field_fm78o-0' ).on( 'change', function(){
    $( ':checkbox[id^="field_masaberlaku_"]' ).prop( 'disabled', this.checked ).change();
  } ).change();
} )( jQuery );
<!-- WordPress still uses jQuery v1.12.4 -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

<div id="frm_field_16_container" class="frm_form_field form-field frm_left_container frm_first frm_third horizontal_radio">
  <div id="field_fm78o_label" class="frm_primary_label">Harga:
    <span class="frm_required"></span>
  </div>
  <div class="frm_opt_container" aria-labelledby="field_fm78o_label" role="group">
    <div class="frm_checkbox" id="frm_checkbox_16-8-0"><label for="field_fm78o-0"><input type="checkbox" name="item_meta[16][]" id="field_fm78o-0" value="Gratis" checked="checked" data-sectionid="8" data-frmval="[&quot;Gratis&quot;]" data-invmsg="Harga: is invalid" /> Gratis</label></div>
  </div>
</div>
<!-- Hidden inputs here -->
<div id="frm_field_18_container" class="frm_form_field form-field frm_left_container frm_first frm_third">
  <label for="field_5ust4" id="field_5ust4_label" class="frm_primary_label">Harga1:
    <span class="frm_required"></span>
  </label>
  <input type="number" id="field_5ust4" name="item_meta[18]" value="" data-sectionid="8" placeholder="Rp. 0,00" data-invmsg="unlimited price is invalid" min="1" max="99999999999" step="1"/>
</div>
<div id="frm_field_19_container" class="frm_form_field form-field frm_left_container frm_third horizontal_radio">
  <div id="field_masaberlaku_1_label" class="frm_primary_label">masa berlaku:
    <span class="frm_required"></span>
  </div>
  <div class="frm_opt_container" aria-labelledby="field_masaberlaku_1_label" role="group">
    <div class="frm_checkbox" id="frm_checkbox_19-8-0"><label for="field_masaberlaku_1-0"><input type="checkbox" name="item_meta[19][]" id="field_masaberlaku_1-0" value="Tanpa batas" checked="checked" data-sectionid="8" data-frmval="[&quot;Tanpa batas&quot;]" data-invmsg="masa berlaku: is invalid" /> Tanpa batas</label></div>
  </div>
</div>
<!-- Hidden inputs here -->
<div id="frm_field_20_container" class="frm_form_field form-field frm_left_container frm_first frm_third">
  <label for="field_5wbs3" id="field_5wbs3_label" class="frm_primary_label">Harga2:
    <span class="frm_required"></span>
  </label>
  <input type="number" id="field_5wbs3" name="item_meta[20]" value="" data-sectionid="8" placeholder="Rp. 0,00" data-invmsg="unlimited price is invalid" min="1" max="99999999999" step="1"/>
</div>
<div id="frm_field_21_container" class="frm_form_field form-field frm_left_container frm_third horizontal_radio">
  <div id="field_masaberlaku_2_label" class="frm_primary_label">masa berlaku:
    <span class="frm_required"></span>
  </div>
  <div class="frm_opt_container" aria-labelledby="field_masaberlaku_2_label" role="group">
    <div class="frm_checkbox" id="frm_checkbox_21-8-0"><label for="field_masaberlaku_2-0"><input type="checkbox" name="item_meta[21][]" id="field_masaberlaku_2-0" value="Sewa 1 bulan" checked="checked" data-sectionid="8" data-frmval="[&quot;Sewa 1 bulan&quot;]" data-invmsg="masa berlaku: is invalid" /> Sewa 1 bulan</label></div>
  </div>
</div>
<div id="frm_field_22_container" class="frm_form_field form-field frm_left_container frm_first frm_third">
  <label for="field_yjuqd" id="field_yjuqd_label" class="frm_primary_label">Harga3:
    <span class="frm_required"></span>
  </label>
  <input type="number" id="field_yjuqd" name="item_meta[22]" value="" data-sectionid="8" placeholder="Rp. 0,00" data-invmsg="unlimited price is invalid" min="1" max="99999999999" step="1"/>
</div>
<div id="frm_field_23_container" class="frm_form_field form-field frm_left_container frm_third horizontal_radio">
  <div id="field_masaberlaku_3_label" class="frm_primary_label">masa berlaku:
    <span class="frm_required"></span>
  </div>
  <div class="frm_opt_container" aria-labelledby="field_masaberlaku_3_label" role="group">
    <div class="frm_checkbox" id="frm_checkbox_23-8-0"><label for="field_masaberlaku_3-0"><input type="checkbox" name="item_meta[23][]" id="field_masaberlaku_3-0" value="Sewa 3 bulan" checked="checked" data-sectionid="8" data-frmval="[&quot;Sewa 3 bulan&quot;]" data-invmsg="masa berlaku: is invalid" /> Sewa 3 bulan</label></div>
  </div>
</div>
<div id="frm_field_24_container" class="frm_form_field form-field frm_left_container frm_first frm_third">
  <label for="field_mjy2z" id="field_mjy2z_label" class="frm_primary_label">Harga4:
    <span class="frm_required"></span>
  </label>
  <input type="number" id="field_mjy2z" name="item_meta[24]" value="" data-sectionid="8" placeholder="Rp. 0,00" data-invmsg="unlimited price is invalid" min="1" max="99999999999" step="1"/>
</div>
<div id="frm_field_25_container" class="frm_form_field form-field frm_left_container frm_third horizontal_radio">
  <div id="field_masaberlaku_4_label" class="frm_primary_label">masa berlaku:
    <span class="frm_required"></span>
  </div>
  <div class="frm_opt_container" aria-labelledby="field_masaberlaku_4_label" role="group">
    <div class="frm_checkbox" id="frm_checkbox_25-8-0"><label for="field_masaberlaku_4-0"><input type="checkbox" name="item_meta[25][]" id="field_masaberlaku_4-0" value="Sewa 6 bulan" checked="checked" data-sectionid="8" data-frmval="[&quot;Sewa 6 bulan&quot;]" data-invmsg="masa berlaku: is invalid" /> Sewa 6 bulan</label></div>
  </div>
</div>
<div id="frm_field_26_container" class="frm_form_field form-field frm_left_container frm_first frm_third">
  <label for="field_c41ii" id="field_c41ii_label" class="frm_primary_label">Harga5:
    <span class="frm_required"></span>
  </label>
  <input type="number" id="field_c41ii" name="item_meta[26]" value="" data-sectionid="8" placeholder="Rp. 0,00" data-invmsg="unlimited price is invalid" min="1" max="99999999999" step="1"/>
</div>
<div id="frm_field_27_container" class="frm_form_field form-field frm_left_container frm_third horizontal_radio">
  <div id="field_masaberlaku_5_label" class="frm_primary_label">masa berlaku:
    <span class="frm_required"></span>
  </div>
  <div class="frm_opt_container" aria-labelledby="field_masaberlaku_5_label" role="group">
    <div class="frm_checkbox" id="frm_checkbox_27-8-0"><label for="field_masaberlaku_5-0"><input type="checkbox" name="item_meta[27][]" id="field_masaberlaku_5-0" value="Sewa 1 tahun" checked="checked" data-sectionid="8" data-frmval="[&quot;Sewa 1 tahun&quot;]" data-invmsg="masa berlaku: is invalid" /> Sewa 1 tahun</label></div>
  </div>
</div>
...