Kontrollkästchen und Zahlenfelder in WordPress

Lesezeit: 15 Minuten

Benutzeravatar von pije76
pije76

Ich verwende ein beeindruckendes Plugin für WordPress, das eine Formularübermittlung generiert. Es wird mehrere Kontrollkästchen und Zahlenfelder geben, genau wie auf https://www.mql5.com/en/market/new_product/mt4.

Auf dieser Seite – unter “Preis” Feld – Standardmäßig ist das Kontrollkästchenfeld auf folgenden Wert aktiviert: “Frei“. Wenn der Benutzer dies deaktiviert, werden unten weitere Kontrollkästchen angezeigt.

Wie kann man diesen Zweck erreichen, indem man formidable auf WordPress verwendet?

Übrigens unten ist HTML-Code von diesem Link oben:

<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>

Und das ist das Javascript-Snippet von diesem Link oben:

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";
        }
    }
}

*Aktualisierung 1

  1. Wenn das erste Kontrollkästchen aktiviert ist, werden andere Optionen deaktiviert (Standardeinstellung).

Geben Sie hier die Bildbeschreibung ein

  1. Wenn das erste Kontrollkästchen deaktiviert ist, können andere Optionen aktiviert oder deaktiviert werden, und es können auch die Zahlenfelder ausgefüllt werden

Geben Sie hier die Bildbeschreibung ein

  1. Die anderen Optionen, wenn ein oder mehrere Kontrollkästchen deaktiviert sind, können auch die Zahlenfelder ausfüllen

Geben Sie hier die Bildbeschreibung ein

*Aktualisierung 2

Hier ist der vollständige Quellcode von der ursprünglichen Website: gist.github.com/pije76/6cb0a03d705b56f145cd0014da480f73

*Aktualisierung 3

Hier ist der modifizierte Code aus Sallys Antwort:

(function($)
{
    $('input[type="number"]').prop('disabled', true);
    $(':checkbox#field_fm78o-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_fm78o-0').prop("checked", false);
    });
})(jQuery);

*Update 4

Die 3 Schritte:

// 1. Disable the Price field when the "Gratis" field is checked but keep enable the "masa berlaku" fields so user can check it. (default)
    $('input[type="number"]').prop('disabled', true);

// 2a. When the "Gratis" field is unchecked then checked all the "masa berlaku" fields.
    $(':checkbox#field_fm78o-0').on('click', function()
    {
        $(':checkbox[id^="field_masaberlaku_"]').prop('checked', !this.checked).change();
    });

// 2b. When one or more the "masa berlaku" fields is checked then user can fill the Price field that have relationship with that field and also disable the other Price fields.
    $(':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_fm78o-0').prop("checked", false);
    });

// 3. When the "Gratis" field is checked again then go back the behaviour to step 1 again (default). 
// I am stuck on this step when pass the step 1 & 2 then I can not check the Gratis field again and I am not sure how to get this step.

  • Um Ihnen helfen zu können, geben Sie einen gültigen Link an. Bekomme den 500 Fehler. Oder fügen Sie einen weiteren Link mit dem gleichen gewünschten Verhalten hinzu.

    – LebCit

    11. Juli 2019 um 17:30 Uhr

  • Es tut mir leid, dass ich einen 500-Fehler bekomme, ich habe vergessen, dass sich die Site als privater Benutzer registrieren muss. Hier ist die Website, die ich versuche, mit demselben gewünschten Verhalten zu erstellen: korexindo.com/k-market/form-k-market Sie können am Ende des Formulars auf Wort sehen: “Harga”

    – pije76

    15. Juli 2019 um 12:31 Uhr


  • Können Sie die generierte Quelle/HTML für anzeigen das “Preis”-Element? Oder besser, erstellen Sie ein öffentliches Testformular mit diesen bedingten Feldern.

    – Sally CJ

    17. Juli 2019 um 6:49 Uhr

  • Hier ist der vollständige Quellcode: gist.github.com/pije76/6cb0a03d705b56f145cd0014da480f73

    – pije76

    17. Juli 2019 um 7:55 Uhr


@pije Nun, wenn Sie Formidable verwenden, müssen Sie bedingte Felder verwenden. Auf diese Weise können Sie abhängig von zuvor ausgewählten/angekreuzten Feldern ein Ein-/Ausblenden weiterer Felder auslösen: Ihre Dokumentation ist dafür ziemlich solide: https://formidableforms.com/knowledgebase/using-conditional-logic/

Benutzeravatar von Sally CJ
Sally C.J

Ich habe keine Pro/Paid-Version von Formidable Forms, die im Lieferumfang enthalten ist Bedingte Felder Unterstützung; aber ich habe diese “generische” jQuery/JavaScript-Lösung gepostet, da Sie immer noch keine Antworten akzeptiert haben … und ich hoffe, es hilft Ihnen.

Also gebe ich Ihnen nur das Drehbuch; Sie können es in die Fußzeile des Themas einfügen (vorher </body> und vergiss die nicht <script> und </script> Tags) oder platzieren Sie es in einer externen .js Datei:

UPDATE 27.07.2019: Das Skript finden Sie im folgenden Snippet.

Dies ist jedoch spezifisch für das Markup/HTML des Abschnitts Harga/Price, wie es sich derzeit auf der Website befindet. Aber Sie können den obigen Code grundsätzlich als Referenz für ähnliche Abschnitte im Formular verwenden. Und hier ist eine Arbeit Demo:

(function($){
  // Define the selectors/variables; be as specific as possible.
  var gratis = $(':checkbox#field_fm78o-0');
  var price_fields = $('.frm_form_field input[type="number"]');
  var masa_berlakus = $(':checkbox[id^="field_masaberlaku_"]');

  // On page load..
  price_fields.prop('disabled', true);  // disable the price fields
  masa_berlakus.prop('checked', false); // and uncheck the "masa berlaku" fields.

  // On click of the "Gratis" field..
  // Gratis checked: disable the price fields; uncheck the "masa berlaku" fields.
  // Gratis unchecked: enable the price fields; check the "masa berlaku" fields.
  gratis.on('change', function(){
    price_fields.prop('disabled', this.checked);
    masa_berlakus.prop('checked', ! this.checked);
  });

  // On click of each "masa berlaku" field..
  // If checked: enable the price field; uncheck the "Gratis" field.
  // If unchecked: disable the price field.
  masa_berlakus.on('change', function(){
    var cont = $(this).closest('div.frm_form_field')
      .prev('div.frm_form_field');

    cont.find('input[type="number"]')
      .prop('disabled', ! this.checked);

    if (this.checked) {
      gratis.prop('checked', false);
    }
  });
})(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>

  • Vielen Dank für Ihre Antwort @sally-cj, ich habe Ihren Code bei Update 3 geändert (ich kann diesen Code hier nicht einfügen, da das Zeichen begrenzt ist), aber das Kontrollkästchen “Gratis” kann nicht erneut aktiviert werden, wenn andere Kontrollkästchen aktiviert sind. Können Sie es bitte beheben, und ich werde Ihre Antwort akzeptieren.

    – pije76

    25. Juli 2019 um 15:30 Uhr


  • Und entschuldigen Sie, ich habe nicht wirklich auf die referenzierte Website geachtet … (mql5.com).

    – Sally CJ

    27. Juli 2019 um 6:13 Uhr

1393360cookie-checkKontrollkästchen und Zahlenfelder in WordPress

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy