Jeśli złapać click-zdarzenie z przycisku takiego:
$('#buttonId').off('click').click(function(clickEvent){
//enter code here
});
rzeczywiście może uniemożliwić zamknięcie Twój modalne. W tym celu, w zależności od sytuacji, można znaleźć tych dwie funkcje przydatne:
clickEvent.preventDefault();
clickEvent.stopPropagation();
Gdybym rozumiał ten serwis (który jest w języku niemieckim) http://www.mediaevent.de/javascript/event-handler-default-verhindern.html poprawnie, preventDefault() zatrzymuje natychmiastową akcję domyślną (takich jak podążając za linkiem). Jednak samo wydarzenie będzie nadal podróżować przez DOM i może być "słyszane" przez różnych słuchaczy zdarzeń, jednym z nich jest słuchacz wydarzeń, który ukrywa modal. W tym celu potrzebna jest druga funkcja, która zatrzymuje podróż zdarzenia przez DOM. W związku z tym nie można go usłyszeć przez ukrytego słuchacza, a okno nie zostanie zamknięte (ukryte). W związku z tym proponuję, aby realizować funkcje tak:
$('#buttonId').off('click').click(function(clickEvent){
//enter code here
var myDataIsValid = true;
// check if Data is valid => myDataIsValid = true or false
if(myDataIsValid){
//do Stuff
}else{
clickEvent.preventDefault();
clickEvent.stopPropagation();
//do other Stuff
}
});
W moim kodu, trzeba tylko użyć stopPropagation(), jak moja domyślna akcja jest poszukiwany, dzięki czemu można korzystać z dwóch funkcji niezależnie. Uwaga: To rozwiązanie zostało przetestowane tylko z przeglądarką Firefox