2017-08-28 7 views
1

Ich habe ein Problem mit Bootstrap Modal beim Versuch, es mit Code anzuzeigen/auszublenden. Wenn wir Text mit mehr als 3 Zeichen eingeben und einmal die Eingabetaste drücken, wird das Modal angezeigt und verschwindet dann wie vorgesehen. Wenn wir jedoch weiterhin die Eingabetaste drücken, wird der Bildschirm schwarz.Bootstrap Problem mit Modal

Ich habe andere Beiträge mit diesem Problem gesehen und alle von ihnen schlagen vor, data-keyboard="false" zu verwenden, aber das funktioniert nicht in meinem Fall. Könnte jemand bitte helfen?

UPDATE

Der Code-Schnipsel mit Arbeitslösung wird nun in der Antwort gepostet aktualisiert.

$(document).ready(function(){ 
 

 
    $("#txtSearch").keydown(function(event){ 
 
    if($.trim($(this).val()) != "" && $(this).val().length > 3 && event.which == 13){ 
 
     showLoading(); 
 

 
     //Some Code 
 
     hideLoading(); 
 
    } 
 
    }); 
 
    
 
}); 
 

 
function showLoading(){ 
 
    if(!$('.modal-backdrop').is(':visible')){ 
 
    $("#myModal").modal("show"); 
 
    } 
 
} 
 

 
function hideLoading(){ 
 
    $("#myModal").modal("hide"); 
 
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 
 
<input id="txtSearch" /> 
 
<div id="myModal" class="modal fade" role="dialog" data-backdrop="static" data-keyboard="false"> 
 
<h1 style="color:white">Loading...</h1> 
 
</div>

+0

Dies ist ein häufiges Problem bei staatlicher Verwaltung; Sie lösen '.modal (" show ");' mehrere Male aus, also müssen Sie eine Variable einstellen und verfolgen, die dies verhindert; zum Beispiel 'var isLoading = false;', was, wenn es auf 'true' gesetzt ist, die Ausführung von' showLoading() 'verhindert. –

+0

@TimLewis - Ich habe eine Variable wie vorgeschlagen hinzugefügt, aber das Problem besteht weiterhin. Bitte sehen Sie meinen aktualisierten Code. – Learner

+0

Es könnte in diesem Fall alles zu schnell passieren; Es gibt keine Zeit zwischen dem Öffnen und dem Schließen, also müssen Sie möglicherweise Handler für '.on (" showed.bs.modal ")' und '.on (" hidden.bs.modal ") hinzufügen, um das richtig zu handhaben. –

Antwort

1

Statt die globale Variable zu verwenden isLoading Ich schlage vor, zu prüfen, ob die modal-Kulisse vor dem Öffnen des modalen sichtbar ist:

if (!$('.modal-backdrop').is(':visible')) { 
    $("#myModal").modal("show"); 
    console.log('show'); 
} 

Das Snippet:

$(document).ready(function() { 
 
    $("#txtSearch").keydown(function (event) { 
 
     if ($.trim($(this).val()) != "" && $(this).val().length > 3 && event.which == 13) { 
 
      showLoading(); 
 
      setTimeout(function() { 
 
       hideLoading(); 
 
      }, 1000); 
 
      //Some Code 
 
      //hideLoading(); 
 
     } 
 
    }); 
 

 
}); 
 

 
function showLoading() { 
 
    if (!$('.modal-backdrop').is(':visible')) { 
 
     $("#myModal").modal("show"); 
 
     console.log('show'); 
 
    } 
 
} 
 

 
function hideLoading() { 
 
    $("#myModal").modal("hide"); 
 
    console.log('hide'); 
 
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> 
 

 

 
<input id="txtSearch"/> 
 

 
<div id="myModal" class="modal fade" role="dialog" data-backdrop="static" data-keyboard="false"> 
 
    <h1 style="color:white">Loading...</h1> 
 
</div>

+0

Danke, das funktioniert und ich habe es auch in meinem Code-Snippet aktualisiert. :) – Learner

+0

@Learner Sie sind willkommen – gaetanoM

Verwandte Themen