这是一种简单的(我知道),但我无法弄清楚。行动在单个事件上触发三次
正在发生的事情:
我对其中一个按钮触发一个动作(其中删除数据库的特定记录)一个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;
}
}
我想这个问题就出在这里只某处。因为在这个行动之后被称为哪个在做它的工作。它只是被称为三次。但如果您觉得需要更多信息,请发表评论。
谢谢!
编辑
没有其他答案? – kanishk