Kok*_*zzu 11 javascript modal-dialog twitter-bootstrap twitter-bootstrap-3
我有按钮的模态(保存)
<button type="button" class="btn btn-success btn-sm" data-dismiss="modal" onclick="do_save()">Save
</button>
Run Code Online (Sandbox Code Playgroud)
do_save()功能失败时如何防止关闭?(例如,当某些数据无法验证时)
Bas*_*sen 27
不要使用data-dismiss="modal"并让你的功能关闭(隐藏)你的模态:
<button type="button" class="btn btn-success btn-sm" onclick="do_save()">Save</button>
Run Code Online (Sandbox Code Playgroud)
"
function do_save()
{
if(Math.floor(Math.random() * 2)==1)
{
console.log('success');
$('#myModal').modal('hide');
return;
}
console.log('failure');
return false;
}
Run Code Online (Sandbox Code Playgroud)
小智 7
如果您像这样从按钮捕获点击事件:
$('#buttonId').off('click').click(function(clickEvent){
//enter code here
});
Run Code Online (Sandbox Code Playgroud)
您实际上可以防止关闭模态。为此,根据您的情况,您会发现这两个函数很有用:
clickEvent.preventDefault();
clickEvent.stopPropagation();
Run Code Online (Sandbox Code Playgroud)
如果我正确理解了这个站点(德语) http://www.mediaevent.de/javascript/event-handler-default-verhindern.html , preventDefault() 停止立即默认操作(例如点击链接)。但是,事件本身仍然会通过 DOM 传播,并且可以被各种事件侦听器“听到”,其中之一是隐藏模态的事件侦听器。为此,需要第二个函数,它会阻止事件在 DOM 中的传播。因此,隐藏的侦听器听不到它,窗口也不会关闭(隐藏)。因此,我建议实现如下功能:
$('#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
}
});
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我只需要使用 stopPropagation(),因为我需要默认操作,因此您可以独立使用这两个函数。
注意:此解决方案仅使用 Firefox 浏览器进行了测试
既然你正在使用jQuery,尽量不要在代码中嵌入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.
});
Run Code Online (Sandbox Code Playgroud)
HTML:
<button id="buttonId" type="button" class="btn btn-success btn-sm">Save</button>
Run Code Online (Sandbox Code Playgroud)
作为替代方案,您可以通过拦截"隐藏"事件并从中返回false来阻止关闭.
| 归档时间: |
|
| 查看次数: |
37118 次 |
| 最近记录: |