[addon ajax-form] Ajaxové formuláře
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Honza Kuchař
- Člen | 1662
Diskuse ke stránce Ajaxové formuláře
Ahoj, nebylo by lepší místo
// po načtení stránky
$(function () {
// odeslání na formulářích
$("form").submit(function () {
$(this).ajaxSubmit();
return false;
});
// odeslání pomocí tlačítek
$("form :submit").click(function () {
$(this).ajaxSubmit();
return false;
});
});
toto?
$(function () {
// odeslání na formulářích
$("form").livequery("submit",function (e) {
e.preventDefault();
$(this).ajaxSubmit();
});
});
Potom fungují i vlastní události submitu formuláře. Například:
$("form").livequery("submit",function (e) {
alert("test");
});
- Honza Kuchař
- Člen | 1662
Upravil jsem si tento JS plun ta, že nejdřív provede validaci, poté nechá provést všechny eventy kromě sebe a nabe a nakonec zavolá sebe. Používám to při MultipleFileUpload:
jQuery.fn.extend({
ajaxSubmit: function (callback,e) {
var form;
var sendValues = {};
// submit button
if (this.is(":submit")) {
form = this.parents("form");
sendValues[this.attr("name")] = this.val() || "";
// form
} else if (this.is("form")) {
form = this;
// invalid element, do nothing
} else {
return null;
}
e.preventDefault();
// validation
if (form.get(0).onsubmit && !form.get(0).onsubmit()) {
e.stopImmediatePropagation();
return null;
}
if(form.data("ajaxSubmitCalled")==true) return null;
form.data("ajaxSubmitCalled",true);
// Tím, že zaregistruji ajaxové odeslání až teď, tak se provede jako poslední. (až po všem)
form.one("submit",function(){
// get values
var values = form.serializeArray();
for (var i = 0; i < values.length; i++) {
var name = values[i].name;
// multi
if (name in sendValues) {
var val = sendValues[name];
if (!(val instanceof Array)) {
val = [val];
}
val.push(values[i].value);
sendValues[name] = val;
} else {
sendValues[name] = values[i].value;
}
}
// send ajax request
var ajaxOptions = {
url: form.attr("action"),
data: sendValues,
type: form.attr("method") || "get"
};
ajaxOptions.complete = function(){
form.data("ajaxSubmitCalled",false);
}
if (callback) {
ajaxOptions.success = callback;
}
return jQuery.ajax(ajaxOptions);
})
e.stopImmediatePropagation();
form.submit();
}
});
Tento soubor doporučuji načíst hned po načtení jQuery a jQuery.livequery.
Mám to přidat do extras?