Это довольно просто (я знаю), но все же я не могу понять это.
Что происходит:
У меня есть jsp, на котором кнопказапускает действие (которое удаляет конкретную запись в БД).Но я заметил, что действие происходит трижды при нажатии кнопки, вызывая сообщение об ошибке, даже если запись удалена.На странице jsp есть два div'а (parent-child) (см. Код ниже).Кнопка у ребенка одна.
Что я выяснил:
когда я удаляю родительский div (который делает дочерний родительский) все работает нормально (Конечно, за исключением функции, которую выполнял родительский div).Я прочитал этот пост:
Обработчик события сработал дважды, а не один раз
, что указывало на проблему «всплывающего события».Я попытался добавить 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;
}
}
Я полагаю, что проблема лежит где-то здесь только.Потому что после этого называется действие, которое выполняет свою работу.Просто его называют трижды.Но если вы считаете, что требуется дополнительная информация, пожалуйста, прокомментируйте.
Спасибо !!
Редактировать