Как я могу запустить Javascript перед выполнением действия JSF <h:commandLink> ?[дубликат]
-
09-06-2019 - |
Вопрос
На этот вопрос уже есть ответ здесь:
- Подтверждение при отправке 1 ответ
Если у вас есть JSF <h:commandLink>
(который использует onclick
событие, связанное с <a>
чтобы отправить текущую форму), как вы выполняете JavaScript (например, запрашиваете подтверждение удаления) перед выполнением действия?
Решение 2
<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()
с вызовом другой функции.
Другие советы
Можно упростить следующим образом
onclick="return confirm('Are you sure?');"
У меня это сработало:
<h:commandButton title="#{bundle.NewPatient}" action="#{identifController.prepareCreate}"
id="newibutton"
onclick="if(confirm('#{bundle.NewPatient}?'))return true; else return false;"
value="#{bundle.NewPatient}"/>
Вы все еще можете использовать onclick.Фонд Содействия развитию спецификация комплекта для рендеринга (см. Encode Behavior) описывает, как ссылка должна это обрабатывать.Вот важная часть (что она отображает для onclick):
var a=function(){/*your onclick*/}; var b=function(){/*JSF onclick*/}; return (a()==false) ? false : b();
Таким образом, вашей функции не будет передан объект event (что в любом случае ненадежно для кроссбраузерности), но возврат true / false приведет к короткому замыканию отправки.
В JSF 1.2 вы можете указать события onclick.
Кроме того, другие библиотеки, такие как Мои лица или Ледяные лица реализуйте обработчик "onclick".
Тогда вам нужно было бы просто:
<h:commandLink action="#{bean.action}" onclick="if(confirm('Are you sure?')) return false;" />
Примечание:вы не можете просто сделать return confirm(...)
поскольку это заблокирует выполнение остальной части JavaScript в событии onClick, что фактически остановит выполнение вашего действия независимо от того, что вернул пользователь!
Если вы хотите выполнить что-то до публикации формы, например, для подтверждения попробуйте событие формы onSubmit.Что -то вроде:
myform.onsubmit = function(){confirm("really really sure?")};
У меня это никогда не срабатывало,
onclick="if(confirm('Are you sure?')) return false;" />
но это сработало
onclick="if(confirm(\"Are you sure?\"))return true; else return false;"
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.