2010-09-08 78 views
3

我到處找關於如何阻止事件冒泡出現一個代碼,我發現一個從怪異模式的網站,這是這樣的:如何使用事件冒泡取消

function doSomething(e){ 
    if(!e) var e = window.event; 
    e.cancelBubble = true; 
    if(e.stopPropagation) e.stopPropagation(); 
} 

但我不知道如何以及在哪裏使用它。 什麼是'e'參數用作(或者應該作爲'e'傳遞什麼)? 是否在事件處理程序代碼中調用此函數? ...等等?

我需要一些幫助,請有人給我一些提示?

基本上,我有4個元素有一個名爲 'updateAvailableAttributes()' 的 '平變化' 的處理程序,就像這樣:

<select id="deliveryMethod" name="deliveryMethod" onchange="updateAvailableAttributes();"></select> 

<select id="formatMethod" name="formatMethod" onchange="updateAvailableAttributes();"></select> 

<select id="yearsMethod" name="yearsMethod" onchange="updateAvailableAttributes();"></select> 

<select id="updateMethod" name="updateMethod" onchange="updateAvailableAttributes();"></select> 

這裏是updateAvailableAttributes()腳本:

function updateAvailableAttributes() { 
var form = document.forms["orderDefinition"]; 
form.elements["formChangeRequest"].value = "true"; 
$.ajax({ 
    type: "POST", 
    url: "ajax/possibleValues.html", 
    data: $("form#orderDefinition").serialize(), 
    success: function(response){ 
    $('#usercontent .sleeve .toprow').html(response); 

    applyValidation(); 
    radioButtonHighlightSelection(); 

    }, 
    error: function(response, ioArgs) { 
     if (response.status == 601) { 
      sessionTimedOut(); 
     } 
     } 
}); 

// Display a "please wait" message 
$("#waitingMsgOverlay, #waitingMsgBox, #waitingMsg, #waitingMsgParag").ajaxStart(function(){ 
     var map = document.getElementById("OrderMap"); 
     map.disableApplication(); 
     $(this).show(); 
     radioButtonHighlightSelection(); 
    }).ajaxStop(function(){ 
     var map = document.getElementById("OrderMap"); 
     map.enableApplication(); 
     $(this).hide(); 
     $("#toolpanel").height($("#orderMap").height()); 
     radioButtonHighlightSelection(); 
});} 

我的問題是,我如何將'doSomething(e)'和'updateAvailableAttributes()'合併到'onchange'事件處理函數中?

預先感謝您。

回答

1

e是事件。例如,如果你在另一個div中有一個div,並且它們都有一個名爲doS​​omething的js點擊處理程序。所以在onclick屬性中使用onclick =「doSomething(event);」如果點擊內部div,外部現在不會處理它

+0

@Vinay B R:謝謝你的迴應。我編輯了我的問題,使其更清晰。 – Shaoz 2010-09-08 14:12:06

+0

我還是新來的JavaScript,所以事件冒泡問題仍然有點令我困惑。我只想將doSomthing()與我已經在'onchange'處理函數中的函數合併。但我該怎麼做? – Shaoz 2010-09-08 14:22:28

+0

如果您可以將您現有的腳本粘貼到此處,我可以爲您編輯 – 2010-09-08 15:07:33

2

整個doSomething是事件處理程序本身。如果沒有參數,您只需註冊事件。 「e」參數由JavaScript運行時本身提供。

+0

@commanderz:謝謝你的回答。我發佈了更多信息。使問題更清楚。 – Shaoz 2010-09-08 14:10:59

0

在DOM模型中,存在與元素相關的各種事件,例如, onclick。如果你想處理任何事件,你將一個事件監聽器附加到一個元素上。例如element.addEventListner(event,yourfunction,bubble)

看到這個http://www.quirksmode.org/js/events_advanced.html

+0

謝謝你的回答。我剛剛閱讀了addEventListener這篇文章,但是因爲我對JavaScript很陌生,所以仍然缺少情節...... – Shaoz 2010-09-08 14:15:27