2012-08-08 97 views
3
$('#div1').on('click', '#otherDiv1', function(event){  
     //Show popup 
     $('#popupDiv').bPopup({ 
      modalClose: false, 
      follow: [false, false], 
      closeClass: 'close' 
     });    
     event.stopPropagation(); 

     $('#div2').on('click', '#otherDiv2', function (event) { 

      // here is ajax request   

      // close popup   
      $('#popupDiv').bPopup().close(); 
      event.stopPropagation(); 
     }); 

    } 

多次點擊otherDiv2調用ajax函數,該如何阻止?當我在otherDviv1點擊彈出的打開,裏面是Ajax請求按鈕如何在此代碼中停止事件冒泡?

HTML代碼

<div id="div2"> 

<div id="div1"><div id="otherDiv1">Click</div></div> 

    <div id="popupDiv"><div class="close">X</div> 
     <input id="otherDiv2" name="otherDiv2" type="submit" value="Click" /> 
    </div> 
</div> 

popupDiv動態

創建。當我點擊按鈕時,一個請求被調用並彈出關閉。如果我再次點擊otherDiv1,並且按鈕兩次調用請求,依此類推。

由於

+0

發表一些'HTML'與上面的代碼 – thecodeparadox 2012-08-08 13:37:07

+0

你真的要添加對'#div1'每次點擊'#div2'一個新的事件管理器或者你只是想使用事件在div2內的前點擊的情況下? – 2012-08-08 13:41:47

+0

由於您使用的是事件委派,因此您必須發佈HTML並準確解釋您看到的行爲。預防事件傳播必須以事件委派來完成。 – 2012-08-08 13:44:48

回答

4

它沒有必要在另一個click結合第二種click。您的代碼在每個click#otherDiv1之間綁定click#otherDiv2。以下過程不需要stopPropagation()

$('#div1').on('click', '#otherDiv1', function(event) { 
    //Show popup 
    $('#popupDiv').bPopup({ 
     modalClose: false, 
     follow: [false, false], 
     closeClass: 'close' 
    }); 
}); 

$('#div2').on('click', '#otherDiv2', function(event) { 

    // here is ajax request   
    // close popup   
    $('#popupDiv').bPopup().close(); 
}); 

但如果你需要到另一個事件中的綁定事件則首先從#otherDiv2取消綁定事件,然後再次綁定。

$('#div1').on('click', '#otherDiv1', function(event) { 
    //Show popup 
    $('#popupDiv').bPopup({ 
     modalClose: false, 
     follow: [false, false], 
     closeClass: 'close' 
    }); 

    $('#div2').off('click').on('click', '#otherDiv2', function(event) { 

     // here is ajax request   
     // close popup   
     $('#popupDiv').bPopup().close(); 
    }); 
}); 
+0

第一次點擊和第二次點擊應該是相關的,我也對其他事件使用相同的彈出窗口,它具有不同的行爲。 – uhura 2012-08-08 14:02:43

+0

@uhura不,你不需要..綁定事件像上面的方式將完成你的工作.. – thecodeparadox 2012-08-08 14:06:35

+0

對不起,我的壞,我沒有解釋夠好。首先點擊我在ajax請求中使用的ID。因爲函數在裏面,所以我可以使用局部變量。 – uhura 2012-08-08 14:19:55

0

如果您使用jQuery的相當多的新版本,每一個Ajax請求返回Deferred對象,你可以在單擊處理程序的外部範圍存儲和分析,以取消現有的請求,或者只是不啓動新的。

此外還有一個概念叫做節流,並有plugins爲jquery它爲你做。