2010-09-08 71 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