Mam okno edycji rekordów w bazie oparte na JQuery UI i tam button zapisz zmiany. Problem polega na tym że usiłuję zablokować przycisk po kliknięciu żeby skrypt mógł się wykonać, ale przykładowo przy dodawaniu rekordów skrypt wykonuje się kilka razy jak kliknę raz szybko to jest OK, ale przy dłuższym przytrzymaniu buttona, albo szybkich kilku kliknięciach dojdę 2-50(!) rekordów, bo zdarzenie click zdaje się wywoływać losową ilość razy ... :(
@InstruktorLewitacji: ten event submit na formularzu wyciągnij z tej definicji buttons, mozesz tez postawić flagę przy kliknięciu zapisz i sprawdzać jej stan przy submicie, natomiast odblokowywac ja po poprawnym zapisie
Mam okno edycji rekordów w bazie oparte na JQuery UI i tam button zapisz zmiany. Problem polega na tym że usiłuję zablokować przycisk po kliknięciu żeby skrypt mógł się wykonać, ale przykładowo przy dodawaniu rekordów skrypt wykonuje się kilka razy jak kliknę raz szybko to jest OK, ale przy dłuższym przytrzymaniu buttona, albo szybkich kilku kliknięciach dojdę 2-50(!) rekordów, bo zdarzenie click zdaje się wywoływać losową ilość razy ... :(
Jakieś pomysły?
function after_lod_left() {
$(".add_records_btn").button({
icons: {
primary: "ui-icon-plusthick"
}
});
$(".open_edit_window, .add_records_btn").click(function () {
// po otworzeniu okna edycji
//
// alert($(this).attr('id'));
$("#dialog").text("Loading ...");
$(function () {
$("#dialog").dialog({
show: {
effect: "drop",
duration: 700
},
hide: {
effect: "drop",
duration: 700
},
resizable: false,
height: 600,
width: 870,
modal: true,
buttons: {
"Zapisz zmiany": function () {
$(":button:contains('Zapisz zmiany')").prop("disabled", true).addClass("ui-state-disabled");
$("#splash").css("display: inline");
$("#super_data_form").submit(function (event) {
// Stop form from submitting normally
event.preventDefault();
// Get some values from elements on the page:
var $form = $(this),
term = $form.serializeArray(),
url = $form.attr("action");
// Send the data using post
var posting = $.post(url, {data: term});
// Put the results in a div
posting.done(function (data) {
//var content = $().find("#left");
$("#save_console").empty().append(data);
$(function () {
$("#save_console").dialog({
resizable: false,
height: 600,
width: 700,
modal: true,
buttons: {
"Wszystko OK, koniec edycji": function () {
$(this).dialog("close");
$("#dialog").dialog("close");
$(":button:contains('Zapisz zmiany')").prop("disabled", false).removeClass("ui-state-disabled");
block_save = false;
},
"Kontynuuj edycję": function () {
$(this).dialog("close");
$(":button:contains('Zapisz zmiany')").prop("disabled", false).removeClass("ui-state-disabled");
block_save = false;
}
},
close: function () {
$(":button:contains('Zapisz zmiany')").prop("disabled", false).removeClass("ui-state-disabled");
block_save = false;
}
});
});
});
});
$("#super_data_form").submit();
},
"Anuluj": function () {
$(this).dialog("close");
}
}
});
});
$("#dialog").load("app/e.php?item=" + $(this).attr('id'), function (responseTxt, statusTxt, xhr) {
if (statusTxt == "success") {
// po otwarciu okna edycji
$(function () {
$("#tabs").tabs({
});
});
}
if (statusTxt == "error")
alert("Error: " + xhr.status + ": " + xhr.statusText);
});
});
}
chodzi konkretnie o wykonanie buttons: {
"Zapisz zmiany": function () {}
$(":button:contains('Zapisz zmiany')").prop("disabled", true).addClass("ui-state-disabled");
nie pomaga, blokuje przycisk ale funkcje wykonują się wcześniej kilka razy :(