it-swarm-ru.tech

Как я могу выполнить Javascript перед выполнением действия JSF <h: commandLink>?

Если у вас есть JSF <h:commandLink> (который использует событие onclick<a> для отправки текущей формы), как вы выполняете JavaScript (например, запрашивает подтверждение удаления) перед выполнением действия?

11
Grant Wagner
<h:commandLink id="myCommandLink" action="#{myPageCode.doDelete}">
    <h:outputText value="#{msgs.deleteText}" />
</h:commandLink>
<script type="text/javascript">
if (document.getElementById) {
    var commandLink = document.getElementById('<c:out value="${myPageCode.myCommandLinkClientId}" />');
    if (commandLink && commandLink.onclick) {
        var commandLinkOnclick = commandLink.onclick;
        commandLink.onclick = function() {
            var result = confirm('Do you really want to <c:out value="${msgs.deleteText}" />?');
            if (result) {
                return commandLinkOnclick();
            }
            return false;
        }
    }
}
</script>

Другие действия Javascript (например, проверка ввода формы и т.д.) Можно выполнить, заменив вызов confirm() вызовом другой функции.

7
Grant Wagner

Можно упростить вот так

onclick="return confirm('Are you sure?');"
14
iordan

Это сработало для меня:

<h:commandButton title="#{bundle.NewPatient}" action="#{identifController.prepareCreate}"  
                                             id="newibutton" 
                                             onclick="if(confirm('#{bundle.NewPatient}?'))return true; else return false;" 
                                             value="#{bundle.NewPatient}"/>
7
Hanynowsky

Вы все еще можете использовать onclick. JSF спецификация набора визуализации (см. Поведение кодирования) описывает, как ссылка должна обрабатывать его. Вот важная часть (что он делает для onclick):

var a=function(){/*your onclick*/}; var b=function(){/*JSF onclick*/}; return (a()==false) ? false : b();

Таким образом, ваша функция не будет передана объекту события (который в любом случае не является надежным для разных браузеров), но возвращение true/false приведет к короткому замыканию отправки.

1
noah

Если вы хотите выполнить что-то до публикации формы, например, для подтверждения, попробуйте событие формы onSubmit. Что-то вроде:

myform.onsubmit = function(){confirm("really really sure?")};
0
Victor
var deleteClick;
var mess="xxx";
function assignDeleteClick(link) {
    if (link.onclick == confirmDelete) {
        return;
    }
    deleteClick = link.onclick;
    link.onclick = confirmDelete;
}


function confirmDelete() {
    var ans = confirm(mess);
    if (ans == true) {
        return deleteClick();
    } else {
        return false;
    }
} 

используйте этот код для JSF 1.1.

0
user562189

В JSF 1.2 вы можете указывать события onclick.

Также другие библиотеки, такие как MyFaces или IceFaces , реализуют обработчик onclick.

То, что вам нужно сделать, это просто:

<h:commandLink action="#{bean.action}" onclick="if(confirm('Are you sure?')) return false;" />

Примечание: вы не можете просто выполнить return confirm(...), так как это заблокирует выполнение остальной части JavaScript в событии onClick, что фактически остановит ваши действия независимо от того, что вернул пользователь!

0
user7094

Это никогда не работало для меня,

 onclick="if(confirm('Are you sure?')) return false;" />

но это сделал

onclick="if(confirm(\"Are you sure?\"))return true; else return false;"
0
Creigh