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