Код SS JS не выполняется в XPages onclick - PullRequest
0 голосов
/ 14 марта 2020

В моем коде есть следующий обработчик событий

<xp:eventHandler event="onclick" submit="true"
                        refreshMode="partial" disableValidators="true"
                        refreshId="#{javascript:compositeData.refreshid}">

                            <xp:this.script><![CDATA[
                            alert('clicked');
                            ]]></xp:this.script>

                        <xp:this.action><![CDATA[#{javascript:print("jkafkjsfjk");}]]></xp:this.action>
</xp:eventHandler>

К сожалению, я никогда не печатаю jkafkjsfjk в консоли, в то время как код CS JS работает нормально, и появляется всплывающее предупреждение.

Я знаю, что наиболее распространенная причина неисполнения этого связана с некоторыми обязательными полями, равными нулю или пустому.

Однако я все закомментировал, но код не выполнено в любом случае ..

Как мне это решить и в чем причина?

Заранее спасибо.

1 Ответ

2 голосов
/ 14 марта 2020

Пара вещей ...

Во-первых, если ваш CS JS возвращает false, тогда SS JS никогда не запускается (что удобно, когда вы хотите, чтобы пользователь подтвердил ...). Полагаю, с вами все будет в порядке, но вы можете вернуть true, чтобы быть в безопасности ....

Во-вторых, частичное refre sh, refre sh идентификаторов и частичное выполнение могут делать то, что может не быть тем, что вы ожидаете. Так что для теста я бы просто сделал полный refre sh и пропустил id.

На какой объект установлен обработчик событий?

Обычно я использую такие обработчики событий для ссылки или кнопки типа:

<xp:button value="Add zone" id="button2" styleClass="btn-xs btn-primary">
    <xp:eventHandler event="onclick" submit="true" refreshMode="partial" refreshId="fields">
        <xp:this.action><![CDATA[#{javascript:AssociationAdmin.createZone()}]]></xp:this.action>
    </xp:eventHandler>
</xp:button>

И это прекрасно работает: -)

Вот пример с подтверждением:

<xp:link escape="true" text="Delete" id="link5" styleClass="action" rendered="#{javascript:!AssociationAdmin.isCatchInfoInUse(row.getKey())}">
    <xp:eventHandler event="onclick" submit="true" refreshMode="complete" id="eventHandler5">
        <xp:this.action><![CDATA[#{javascript:AssociationAdmin.removeCatchInfo(row.key);}]]></xp:this.action>
        <xp:this.script><![CDATA[return window.confirm("Are you sure you want to delete these fields: #{javascript:row.getName()}?\n\nDeletion cannot be undone!!")]]></xp:this.script>
    </xp:eventHandler>
</xp:link>

Дополнительные примечания:

Возможно, вы захотите отправить без проверки. Вы можете сделать это, добавив disableValidators="true" к вашему обработчику событий

Пожалуйста, не забудьте иметь id на контроле, где у вас есть ваш обработчик событий. Просто потраченный впустую вечер и утро на самое странное поведение, вызванное диалоговым окном открытия кнопок, НЕ имело и id атрибута ...

Надеюсь, эти примеры помогут вам: -)

/ John

...