2011-11-18 37 views
1

这是一种简单的(我知道),但我无法弄清楚。行动在单个事件上触发三次

正在发生的事情:

我对其中一个按钮触发一个动作(其中删除数据库的特定记录)一个jsp。但是我观察到,按钮被点击时,动作会被触发三次,即使记录被删除,也会引发错误消息。在jsp页面上有两个'div'(父子)(参见下面的代码)。该按钮在儿童之中。

我发现了什么:

当我删除父DIV(这使得一个孩子,父母)一切工作正常(的课程不同的是,父DIV正在执行的功能)。我读这篇文章:

Event handler triggered twice instead of once

这表明 '事件冒泡' 的问题。我试着加入stopPropagation();但是那也没有锻炼。

也许一些简单的东西就是逃避我的眼睛。请帮忙。

这里是我的代码为JSP:

<s:url id="scriptURL" action="getContactInfo" /> 
<sd:div href="%{scriptURL}" listenTopics="getContactInfo" formId="contactInfo" showLoadingText="false" preload="false"> 
    <s:url id="scriptURL1" action='delContactInfo'/> 
    <sd:div href="%{scriptURL1}" listenTopics="delContactInfo" formId="contactInfo" showLoadingText="false" preload="false"> 

     <s:actionerror/> 
     <s:actionmessage/> 
     <s:form name="contactInfo" id="contactInfo" action="editContactInfo"> 

      <sd:autocompleter id="contact" name="contact" label="Full Name " autoComplete="false" searchType="substring" list="contactList" valueNotifyTopics="getContactInfo"/> 
      <sd:autocompleter id="customer" name="customer" label="Company " autoComplete="false" searchType="substring" list="customerList" valueNotifyTopics="getContactInfo"/> 
      //////other controls//////// 


      //////other controls//////// 

      <s:submit id="submit" name="submit" value="Save Changes" align="center" onclick="saveEvent(event);"/> 

     </s:form> 

     <s:submit id="del" name="del" align="center" value="Delete" onclick="deleteEvent(event);"/> 

    </sd:div> 

</sd:div> 

的JS文件:

function deleteEvent(e) 
{ 
    alert('Delete the selected account !!'); 
    alert('Are you sure?'); 
    dojo.event.topic.publish('delContactInfo'); 

    event = e || window.event; 
    if ('bubbles' in event) { // all browsers except IE before version 9 
     if (event.bubbles) { 
      event.stopPropagation(); 
      alert('1'); 
     }else { // Internet Explorer before version 9 
      event.cancelBubble = true; 
      alert('2'); 
     } 
    }else{ 
     event.cancelBubble = true; 
     alert('3'); 
    } 
} 

function saveEvent(e){ 
    alert('Do you want to save the changes you made?'); 

    event = e || window.event; 
    if ('bubbles' in event) { // all browsers except IE before version 9 
     if (event.bubbles) { 
      event.stopPropagation(); 
     }else { // Internet Explorer before version 9 
      event.cancelBubble = true; 
     } 
    }else{ 
     event.cancelBubble = true; 
    } 
} 

我想这个问题就出在这里只某处。因为在这个行动之后被称为哪个在做它的工作。它只是被称为三次。但如果您觉得需要更多信息,请发表评论。

谢谢!

编辑

+0

没有其他答案? – kanishk

回答

1

如果你必须这样做在线使用这样的事情:

<prior stuff here>; var e = arguments[0] || window.event; e.stopPropagation(); 

最好就是把代码中的外部函数,并调用它像这样:

onclick="handleEvent(event);" 


function handleEvent(e) 
{ 

    // function code 

    // then 
    event = e || window.event; 
    if ('bubbles' in event) { // all browsers except IE before version 9 
    if (event.bubbles) { 
     event.stopPropagation(); 
    } 
    else { // Internet Explorer before version 9 
     event.cancelBubble = true; 
    }  
    } 
} 

取自各地的示例http://help.dottoro.com/ljgfjsxd.php


为了您的最新代码,我建议这样的:

<s:form name="contactInfo" id="contactInfo" action="editContactInfo"> 

     <sd:autocompleter id="contact" name="contact" label="Full Name " autoComplete="false" searchType="substring" list="contactList" valueNotifyTopics="getContactInfo"/> 
     <sd:autocompleter id="customer" name="customer" label="Company " autoComplete="false" searchType="substring" list="customerList" valueNotifyTopics="getContactInfo"/> 
     //////other controls//////// 


     //////other controls//////// 

     <s:submit id="submit" name="submit" value="Save Changes" align="center" onclick="saveEvent(event);"/> 
     <s:submit id="del" name="del" align="center" value="Delete" onclick="deleteEvent(event);"/> 
    </s:form> 

注:这两个提交按钮都以相同的形式。

+0

嗨,我刚才试过这个。问题依然存在。任何更多的建议。 – kanishk

+0

@ kanishk查看编辑 – Hogan

+0

嗨,感谢您的支持,它仍然无法正常工作。我尝试了一些修改,从Google获得一些意见。但它只有一个区别,3个动作执行线程现在正在一个接一个地执行,而不是像前面那样同时执行。 – kanishk

0

。请参阅下面的链接并使用由struts2提供的inbuild标签。

How to restrict double click on button in struts /Java?

+0

此链接讨论如何否定效果点击按钮两次我的问题是,只有一次点击导致行动执行3次。还要注意,当我删除一个div一切正常......正如我在我的问题中提到的。 – kanishk