6

私はdo_save()関数が失敗したときに閉じるのを防ぐ方法onclickを使用してブートストラップモードがボタンから閉じるのを防ぐにはどうすればいいですか?

<button type="button" class="btn btn-success btn-sm" data-dismiss="modal" onclick="do_save()">Save 
    </button> 

ボタンで(保存)モーダルていますか?あなたが使用しているので

<button type="button" class="btn btn-success btn-sm" onclick="do_save()">Save</button> 

function do_save() 
    { 
     if(Math.floor(Math.random() * 2)==1) 
     { 
      console.log('success'); 
      $('#myModal').modal('hide'); 
      return; 
     } 
     console.log('failure'); 
     return false; 
    } 

答えて

17

あなたのモーダル(たとえばとき、いくつかのデータが検証に失敗しました)とにかくJavaScript/jQueryをコードに埋め込まないようにしてください。

$('#buttonId').on('click', function() { 
    // either call do_save or embed the contents of do_save in here 
    var myDataIsValid = true; // change to call validator function 
    if (myDataIsValid) { 
    $('#myModal').modal('hide'); 
    } 
    return true; // value depends on whether you want stopPropagation or not. 
}); 

HTML:代替案として

<button id="buttonId" type="button" class="btn btn-success btn-sm">Save</button> 
、あなたはおそらく「隠す」イベントをインターセプトし、それとはfalseを返すことで、閉鎖を防ぐことができます。

 $('#buttonId').off('click').click(function(clickEvent){ 
     //enter code here 
    }); 

あなたが実際にあなたのモーダルの閉鎖を防ぐことができます:あなたは、このようなボタンからのクリックイベントをキャッチした場合

5

data-dismiss="modal"を使用して、関数に近い(非表示)をさせてはいけません

3

。このため、状況に応じて、あなたは便利なこれら二つの機能があります:

 clickEvent.preventDefault(); 
    clickEvent.stopPropagation(); 

私は http://www.mediaevent.de/javascript/event-handler-default-verhindern.html 正しく(ドイツ語である)このサイトを理解している場合、でpreventDefault()はすぐにデフォルトのアクションを(のような停止しますリンクに続く)。しかし、イベント自体は引き続きDOMを通過し、さまざまなイベントリスナーによって「聞く」ことができます。その1つは、モーダルを隠すイベントリスナーです。このためには、DOMを通るイベントの移動を停止する2番目の関数が必要です。したがって、隠れているリスナーは聞こえず、ウィンドウは閉じられません(隠されます)。したがって、私はそうのような機能を実装することをお勧め:あなたが独立して二つの機能を使用できるように私のコードで

 $('#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 
     } 
    }); 

を、私は、私のデフォルトの動作が望まれているとして、のstopPropagation()を使用する必要があります。

注:このソリューションはFirefoxブラウザでのみテストされました

関連する問題