Как я могу предотвратить выполнение действия onRowClick по умолчанию при нажатии на элемент в строке таблицы? - PullRequest
0 голосов
/ 10 октября 2018

В устаревшем приложении, основанном на Seam 2.2, jsf 1.2 и Richfaces 3.3, у меня возникла проблема с Internet Explorer:

У меня есть таблица данных со щелкающими строками.Нажатие на строку откроет подробный вид элемента.Последний столбец содержит значок корзины.При нажатии на значок появляется диалоговое окно подтверждения.Когда это не подтверждено, больше ничего не должно происходить.Это отлично работает в Google Chrome.

Не работает с Internet Explorer (тестирование в Версии 11).Здесь выполняется действие по умолчанию action="#{myAction.select(k)}".Я попытался добавить event.preventDefault(); к event.stopPropagation();, но это не помогло.

Как мне заставить это работать в Internet Explorer?

<rich:dataTable id="myDatatable" value="#{list.model}" var="k"
                headerClass="tableheader"
                onRowMouseOver="this.style.backgroundColor='#F1F1F1'"
                onRowMouseOut="this.style.backgroundColor='#{a4jSkin.tableBackgroundColor}'"
                rowClasses="clickableRow">
    <a4j:support event="onRowClick" id="onRowClickEvent"
                 action="#{myAction.select(k)}"
                 reRender="myDatatable"/>

    <rich:column>
        <f:facet name="header">
            <a4j:commandLink action="#{list.changeOrder('k.name')}" 
                    value="Name #{list.orderColumn == 'k.name' ? (list.orderAscending ? '▲' : '▼') : ''}"
                    reRender="myDatatable" ajaxSingle="true" limitToList="true"/>
        </f:facet>
        <h:outputText value="#{k.name}"/>
    </rich:column>

    <rich:column style="text-align: center;">
        <f:facet name="header">
            <a4j:outputPanel layout="block">
                <h:outputText value="Delete"/>
            </a4j:outputPanel>
        </f:facet>

        <a4j:outputPanel onclick="event.preventDefault();event.stopPropagation();">
            <s:graphicImage value="/img/bin_closed.gif" style="cursor: pointer;">
                <a4j:support event="onclick"
                             action="#{myAction.delete(k)}"
                             ajaxSingle="true" limitToList="true"
                             onsubmit="if(!confirm('Are you sure?')) { return false; }" />
            </s:graphicImage>
        </a4j:outputPanel>
    </rich:column>

</rich:dataTable>

1 Ответ

0 голосов
/ 11 октября 2018

Мне удалось решить эту проблему, заменив event.preventDefault();event.stopPropagation(); на Event.stop(event);, как описано в ответе на этот вопрос: Остановка цепочки событий JSF, Answer by prageeth

...