我有点混淆在bootstrap3的javascript模式中触发回调函数。在正常的jquery.post
中,你可以这样做,
$.post('path', { something: something }, function(data) {
console.log(data);
});
但是在bootstrap 3模式中,我通过脚本触发模态,我这样做是基于我如何理解他们网站中的解释。
$('selector').modal('show', function() {
//here comes the problem, I have a button in the modal in the html, my code
//if the button was clicked inside this modal is..
$('#myButton').on('click', function() {
console.log("this is a try");
});
});
但很可惜,如果我按一下按钮,什么也没发生,什么也没有记录在控制台中。如何在模式的bootstrap 3中调用回调函数?
答案 0 :(得分:28)
对于Bootstrap 3,事件现在是命名空间,因此模态的show
事件将为show.bs.modal
...
$('#myModal').on('show.bs.modal', function (e) {
alert('modal show');
});
答案 1 :(得分:14)
@Skelly是对的,您可以使用Sub Dta_Array_Set(vDtaHdr() As Variant, vDtaBdy() As Variant)
Dim vArray As Variant
With ThisWorkbook.Worksheets("Sht(1)").Range("DATA") 'Change as required
vArray = .Rows(1)
vDtaHdr = vArray
vArray = .Offset(1, 0).Resize(-1 + .Rows.Count)
vDtaBdy = vArray
End With
End Sub
这样的事件:
Private Sub ListObject_ReplaceData()
Dim MyTable As ListObject
Dim vDtaHdr() As Variant, vDtaBdy() As Variant
Dim lRowsAdj As Long
Set MyTable = ThisWorkbook.Worksheets(1).ListObjects(1) 'Change as required
Call Data_Array_Set(vDtaHdr, vDtaBdy)
With MyTable.DataBodyRange
Rem Get Number of Rows to Adjust
lRowsAdj = 1 + UBound(vDtaBdy, 1) - LBound(vDtaBdy, 1) - .Rows.Count
Rem Resize ListObject
If lRowsAdj < 0 Then
Rem Delete Rows
.Rows(1).Resize(Abs(lRowsAdj)).Delete xlShiftUp
ElseIf lRowsAdj > 0 Then
Rem Insert Rows
.Rows(1).Resize(lRowsAdj).Insert Shift:=xlDown
End If: End With
Rem Overwrite Table with New Data
MyTable.HeaderRowRange.Value = vDtaHdr
MyTable.DataBodyRange.Value = vDtaBdy
End Sub
官方文件说:
调用show instance方法时会立即触发此事件。
请注意,此事件很快就被解雇了#34;您可能需要使用show.bs.modal
代替。
有关此活动的文档:
当模式对用户可见时将触发此事件(将等待CSS过渡完成)。
这会影响@Keith yeoh's答案,您应该尽可能避免超时。
答案 2 :(得分:11)
为第一个答案添加一点点,这是因为当回调被触发时,模态中的DOM还没有完全加载,或许应该做一点点破解,在回调一段时间之后阻止动作。希望它有所帮助!
$('#myModal').on('show.bs.modal', function (e) {
setTimeout(function(){
// something here
}, 300);
});
答案 3 :(得分:8)
我认为更好的是,使用“shown.bs.modal”它会在模态已经加载时被激活。 Bootstrap modal events
$('#myModal').on('shown.bs.modal', function (e) {
alert('modal is allready shown');
});
答案 4 :(得分:0)
用
包裹$(window).on('load', function() {
...modal callback here.
});