2016-09-05 5 views
0

Ich möchte es eingerichtet haben. Wenn es einen bestimmten Wert überschritten hat, wird eine Warnung ausgelöst, um zu informieren, dass der Benutzer zu viele Felder markiert hat. Die Warnung wird erfolgreich angezeigt, das entsprechende Kontrollkästchen bleibt jedoch aktiviert. Ich habe diese Funktion schon einmal benutzt, aber dieses Mal funktioniert es nicht. Ich weiß nicht warum. Vielen Dank im Voraus für jede Hilfe gegeben.Box prüft, obwohl eine Warnung ausgelöst wird?

function cannotDoThreeATTandAwareness() { 
    var i = 0; 
    $('.ATT, #aware').each(function() { 
    if ($(this).is(':not(:visible)')) { 
     i += 3 
    } 
    }); 
    $('.ATT').each(function() { 
    if ($(this).is(':checked')) { 
     i += 3 
    } 
    }); 
    $('.awareness').each(function() { 
    if ($(this).is(':checked')) { 
     i += 1 
    } 
    }); 

    if (i > 9) { 
    alert('You cannot select this paper as you have already selected your Core 2 paper'); 
    }; 

    return i == 10; 
} 
onclick =" if(cannotDoThreeATTandAwareness()){this.checked=false};" 
+0

'I' könnte größer sein als 9 aber * nicht * 10 ... – Biffen

+0

'zurück i> 9;'? '$ ('. ATT, #aware')' macht wenig Sinn im Zusammenhang mit dem '$ ('. ATT,')' später ... –

+0

Kannst du das HTML zeigen? Sie können wahrscheinlich einen Selektor schreiben, der ': selected' enthält und dann nur die Länge des Selektors ermitteln, um zu wissen, wie viele davon ausgewählt sind. Und Sie müssen manuell das letzte Kontrollkästchen deaktivieren, sobald der Benutzer das Limit überschreitet. – Shilly

Antwort

0

einfach return das Ergebnis, das Sie auch in der Click-Ereignis möchten.

function cannotDoThreeATTandAwareness() { 
 
    var i = 0; 
 
    // used 'true' to always make it fail, for the sake of example 
 
    if (true || i > 9) { 
 
    alert('You cannot select this paper as you have already selected your Core 2 paper'); 
 
    }; 
 

 
    return i > 9; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<label> 
 
    <input type="checkbox" onclick="return cannotDoThreeATTandAwareness()"> 
 
    Click me 
 
</label>

Eine andere Möglichkeit wäre ein Argument für die Funktion hinzufügen, lassen Sie uns e sagen, und wo Sie Block die Veränderung wollen, können Sie e.preventDefault() verwenden. Damit dies funktioniert, werden Sie das Ereignis bis in die Funktion übergeben müssen, hier ist ein Ausschnitt:

function cannotDoThreeATTandAwareness(e) { 
    ... 
    if (true || i > 9) { 
    e.preventDefault() 
    ... 
    }; 
} 

<input type="checkbox" onclick="cannotDoThreeATTandAwareness(event)"> 
Verwandte Themen