2016-08-29 4 views
0

Ich habe ein Formular mit mehreren Kontrollkästchenfeldern und einem entsprechenden Kommentarfeld für jedes Kontrollkästchen. Ich erstelle diese Felder dynamisch. Zum Beispiel würde das Kontrollkästchenfeld tag1Kommentare1 entsprechen. Wenn das Kontrollkästchen aktiviert ist, möchte ich keine Kommentare benötigen. Wenn es nicht markiert ist, möchte ich Kommentare benötigen.Kontrollkästchen Ereignis ändern, um ein anderes Feld auszulösen

Manchmal sind die Felder basierend auf der letzten Eingabe eines Benutzers bereits ausgefüllt. Mit anderen Worten, das Kontrollkästchen ist möglicherweise bereits aktiviert, wenn die Seite geladen wird oder nicht. Ich habe Logik gesetzt, um das entsprechende Kommentarfeld als erforderlichen oder basierend darauf basierend nicht zu erstellen.

Alles Situation scheint außer einem zu arbeiten. Wenn ich das Kästchen ankreuze und dann das Kästchen abnehme, kann ich das Formular ohne Kommentare abgeben. Unten ist was ich versucht habe.

$(document).on('change', 'input[type=checkbox]', function() { 
    var checkbox = $(this), 
    otherInput = $('#comments' + this.id.replace('tag', '')); 


    otherInput.removeProp('required', !checkbox.is(':checked')); 
    if (!checkbox.not(':checked')){ 
    otherInput.prop('required',true); 
    } 
}); 

-------------------- zweiten Versuch

$(document).on('change', 'input[type=checkbox]', function() { 
    var checkbox = $(this), 
    otherInput = $('#comments' + this.id.replace('tag', '')); 

    otherInput.prop('required', !checkbox.not(':checked')); 
    otherInput.removeProp('required', !checkbox.is(':checked')); 

}); 

Beide lösen die gleichen Situationen, mit Ausnahme der oben erwähnt. Bitte beraten.

+0

Was ist der Zweck von 'otherInput.removeProp ('erforderlich',! Checkbox.is (': checked'));' am zweiten Beispiel? – guest271314

+0

@ guest271314 Wenn der Benutzer das Kontrollkästchen aktiviert, wird das erforderliche Attribut aus dem entsprechenden Kommentarfeld entfernt. –

+0

Ja, obwohl die vorherige Zeile 'otherInput.prop ('required',! Checkbox.not (': checked'));' dies erreicht , Ja? Können Sie eine Datei erstellen, um das Problem zu demonstrieren? – guest271314

Antwort

1

einfach schalten Sie die 'erforderlich' Eigenschaft basierend auf Checkbox Status

$(document).on('change', 'input[type=checkbox]', function() { 
    var checkbox = $(this), 
    otherInput = $('#comments' + this.id.replace('tag', '')); 

    otherInput.prop('required', !checkbox.is(':checked')); 

}); 

Sehen Sie diese JSFiddle

+0

Gute Antwort +1 Wenn Sie können, ist es eine gute Idee, eine Demo des Konzepts zu erstellen, entweder mit [jsFiddle] (http://jsfiddle.net) oder durch Drücken von Strg + M im Editor und Erstellen eines Stack-Snippets Beispiel.* – gibberish

0

Wenn die Schaltfläche "Senden" gedrückt wird, tun Sie Ihre Validierung:

psuedocode:

onSubmitPressed: function(){ 
    if(checkbox is checked){ 
     // alert user field is required; 
     return false; 
    }else{ 
     return true; 
    } 
0

Sieht aus, als hätte ich eine schlechte Syntax, aber es hat keinen Fehler geworfen. Ich änderte meinen ersten Versuch:

$(document).on('change', 'input[type=checkbox]', function() { 
    var checkbox = $(this), 
    otherInput = $('#comments' + this.id.replace('tag', '')); 

    otherInput.removeProp('required', !checkbox.is(':checked')); 

    if ($(this).is(':not(:checked)')){ 
    otherInput.prop('required',true); 
    console.log('working'); 
    } 
}); 

Das nun hinzufügt und entfernt das gewünschte Attribut basierend auf dem Kontrollkästchen aktiviert wird oder nicht geprüft.

Verwandte Themen