在bootstrap3的模态中回调函数

时间:2013-10-30 07:36:35

标签: jquery callback twitter-bootstrap-3

我有点混淆在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中调用回调函数?

5 个答案:

答案 0 :(得分:28)

对于Bootstrap 3,事件现在是命名空间,因此模态的show事件将为show.bs.modal ...

$('#myModal').on('show.bs.modal', function (e) {
    alert('modal show');
});

演示:http://bootply.com/90952

答案 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答案,您应该尽可能避免超时

来源: Official Bootstrap documentation

答案 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.
});