У меня есть DataTable с CommandButton, который действует следующим образом:
<h:commandButton action="#{communicator.requestFavoriteDetails}"
onclick="disableSubmit(this.id);"
update="@navi:tableFavorites">
<f:setPropertyActionListener value="#{book}"
target="#{favorites.selectedFavorite}" />
<f:ajax />
</h:commandButton>
(я только что удалил некоторые теги ...)
Эта кнопка работает нормально.Но на некоторых (мобильных) устройствах запрос отправляется дважды по клику.Я не знаю почему .. Я попробовал все, но ничего не помогло, чтобы предотвратить это.(например)
Этот код отображается в теге: и я знаю, что это нельзя отключить.
Я хочу добавить таймер.Когда пользователь нажимает на эту кнопку, событие «onclick» должно быть заменено пустой функцией, а через 2 .. секунды оно должно быть восстановлено.Таким образом, я могу предотвратить отправку запроса дважды.
Функция disableSubmit (id) действует следующим образом:
function disableSubmit(id) {
var new_func = "function() { return false }";
if ( typeof(document.getElementById(id)) == "object" && typeof(document.getElementById(id).onclick) == "function") {
if ($("#" + escapeJSFid(id)).attr('onclick') != new_func) {
var old_func = $("#" + escapeJSFid(id)).attr("onclick");
$("#" + escapeJSFid(id)).attr('onclick','"+new_func+"').delay(2000).attr('onclick','"+old_func+"');
}
}
}
Но этот код не работает.FF не возвращает никаких ошибок .. Ох .. и escapeJSFid - это простая функция:
function(id){ id.replace(/:/g,"\\:"); }
Кто-нибудь знает, как я могу предотвратить отправку этого запроса дважды?Я знаю, что есть много других решений, и мой код плохо написан ... но я просто хочу, чтобы он работал.
С уважением