Diskuze: Potvrzovací hláška přes PHP
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 20 zpráv z 20.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
ja som dával na <a> alebo <input type="submit"> alebo <button> toto:
onclick="return confirm('Skutočne?')"
napr:
<input type="submit" name="delete_submit" onclick="return confirm('Skutočne?')" value="Zmazať" />
když dám například na to <a> onlick tak mi to háže chybu. Jak to začlenit do tohoto řádku? :
<?php
..
echo( '<td style="width: 160px;border:none;"><a href="administrace.php?odstranit=' . htmlspecialchars($inzerat['ID']) . '"><img src="../img/ikony/smazat.png"></a></td>');
?>
Samozřejmě, že to bez JS půjde. Uživatel odešle požadavek na smazání
a ty místo toho aby jsi ho smazal vygeneruješ stránku na které bude Ano/Ne
tlačítka. Ano záznam smaže a Ne tě vrátí zpět. Ale podle mě je mnohem
uživatelsky příjemnější vyhodit v JS okno které se tě zeptá
No a tak jak to má na mysli Matúš Petrofčík to nejde zařídit? Snažím se tam nacpat nějak to onclick ale nechce to jít :/
Tebe to asi píše chybu lebo tam máš veľa " a ', musíš si niektoré z
nich escapovať to preto
<?php
..
echo( '<td style="width: 160px;border:none;"><a onclick="return confirm(\'Skutočne?\')"href="administrace.php?odstranit=' . htmlspecialchars($inzerat['ID']) . '"><img src="../img/ikony/smazat.png"></a></td>');
?>
snáď tak nejako by to mohlo ísť... ak nie tak uzatváraj string do " a escapuj všetky " znaky v stringu... trochu viac námahavé
alebo nech ti niekto iný poradí iný spôsob
Byl tam problém s těmi apostrofy a už to funguje! díky, přesně takovéto
jednoduché řešení jsem chtěl.
Nie je to síce ideálne, pretože tam vyskakuje tá divná hláška ktorú
si nevieme naštýlovať, ale myslím že to stačí, veď na ČSFD to majú
rovnako není zač
Ahoj, mám problém s confirm. Hláška se otevře, ale at dám jakoukoli
možnost požadavek se vždy vykoná.
odkaz je pomocí ajax:
<a class="ajax" n:href="deleteImage! $reference->url, $reference->images_count, $i" data-confirm="Opravdu si přejete odstranit vybraný obrázek?">Odstranit</a>
js souborů je nalinkováno víc v pořadí:
<script src="{$basePath}/js/scrollreveal/scrollreveal.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="{$basePath}/www/js/netteForms.js"></script>
<script src="{$basePath}/www/js/nette.ajax.js"></script> {* Nette Ajax depens on jQuery *}
<script src="https://nette.github.io/resources/js/netteForms.min.js"></script>
<script src="{$basePath}/www/js/main.js"></script>
<script src="{$basePath}/js/main_2.js"></script>
<script type="text/javascript" src="{$basePath}/js/confirm.js"></script>
<script src="http://blueimp.github.io/Gallery/js/jquery.blueimp-gallery.min.js"></script>
a v confirm.js:
$(function () {
$("a[data-confirm]").click(function (e) {
if (!confirm($(this).data('confirm')))
e.preventDefault();
});
});
Způsobuje to ajax, že se požadavek z odkazu pokaždé vykoná, nebo může
to být problém tím, že se js soubory mezisebou tlučou?
Děkuji za pomoc.
Ahoj,
Nejsem si úplně jist, ale nejspíše to je tak, ze tento event akci zastaví,
ale event, který navesil nette.ajax.js se provede. Zkus tu část s confirmem
přepsat jak nette ajax extension (popsáno to je v dokumentaci na GitHubu).
Btw mas tam 2x prilinkovane netteForms.js
přehlédl jsem že tam mám netteForms 2x děkuji, ale moc nerozumím tomu, co bych měl udělat, aby mi confirm fungoval jak má. Nikde jsem nenašel, že by se někde řešil stejný problém. Programovat v JS neumím a nevím si stím příliš rady. Prosím tedy o něaké nasměrování, nebo podrobnější popsání, co stím mám dělat. Děkuju.
Hledáš asi špatně
Asi se budeš muset trochu i JS naučit.
Směřoval jsem tě na GH https://github.com/…er/readme.md
Konkrétně sekce "Extensions". Můžeš pro Nette ajax nadefinovat
"rozšíření", což je vlastne jenom překrytí základních eventů z jQuery.
Tyto eventy se spouštějí s každým requestem, který jde skrze Nette ajax.
Využil bych konkrétně event "before", který se volá pred posláním
requestu a v případě, ze vratiš False, tak se neprovede. Samozřejmě chceš
confirm zobrazovat jen u odkazů s data-confirm. Takže si z parametru
"settings" eventu "before" vytahneš element, který ajax "odpálil",
zkontroluješ tento data atribut, případně zobrazíš confirm a vratíš
True/False.
Na Nette fóru je odledně Nette.ajax poměrně rozsáhlé téma a tam určite
vse je. Jsem ted na telefonu, takže ukázku zdrojového kódu se mi na něm
psát nechce
nemohl jsem nic najít, protože jsem nevěděl co hledat a hledal jsem
nesprávné věci našel
jsem si toto:
https://craftpip.github.io/jquery-confirm/#…
konkrétně toto okno:
$.confirm({
title: 'Confirm!',
content: 'Simple confirm!',
buttons: {
confirm: function () {
$.alert('Confirmed!');
},
cancel: function () {
$.alert('Canceled!');
},
somethingElse: {
text: 'Something else',
btnClass: 'btn-primary',
keys: ['enter', 'shift'],
action: function(){
$.alert('Something else?');
}
}
}
});
Ale vubec z toho nechápu, jak to použít(jak bude vypadat odkaz...)
Pak jsem našel tuto diskuzi o řešení tohoto problému:
http://stackoverflow.com/…with-confirm
kdecfunkční výsledek by měl být takový:
Odkaz:
<a href="#" class="removeItem delete">remove</a>
a js kod:
$('.delete').click(function () {
confirm('Are you sure you want to delete this?');
});
$('.removeItem').click(function (event) {
event.preventDefault();
$.ajax({
url: 'myUrl',
type: "POST",
data: {
// data stuff here
},
success: function () {
// does some stuff here...
}
});
});
Ale nevím, jak to upravit, aby fungoval můj původní odkaz:
<a class="ajax" n:href="deleteImage! $reference->url, $reference->images_count, $i" data-confirm="Opravdu si přejete odstranit vybraný obrázek?">Odstranit</a>
přidám dám pryč class="ajax"a nahradím názvem funkce a v kodu js to změním takto?:
$.ajax({
url: 'dodeleteImage&$reference->url&$reference->images_count&$i"',
type: "GET",
data: {
// data stuff here
},
success: function () {
// does some stuff here...
}
pro každý odkaz s potřebou potvrzení si udělám novou funkci s jinými
požadavkami a hláškou. Nebo jak na to správně? Bylo by možné ukázat mi
kod, jak by vapadal původní odkaz v tomto příkladu?
Děkuji mnohokrát.
Četl jsi vůbec, co jsem psal? evidentně jen první větu...
// link
<a n:href="yourHandle!" class="ajax" data-ajax-confirm="Really?">click me</a>
....
// After call $.nette.init();
$.nette.ext('confirm', {
before: function (xhr, settings) {
if (!settings.nette)
return;
var question = settings.nette.el.data('ajax-confirm');
if (question)
return confirm(question);
}
});
Tohle je jedno z mnoha možných řešení a zároveň řešení, ke kterému jsem tě celou dobu vedl.
Děkuji mnohokrát. Tohle bych dohromady nikdy nedal. Ale ještě mám jednu
prosbičku.
Zjistil jsem, že mi toto nefunguje jak má ani u neajaxového odkazu na
smazání.
Tvé řešení jsem umístil takto:
main.js:
$(function () {
$.nette.init();
});
$.nette.ext('confirm', {
before: function (xhr, settings) {
if (!settings.nette)
return;
var question = settings.nette.el.data('ajax-confirm');
if (question)
return confirm(question);
}
});
A pro ajaxové odkazy funguje bezchybně, jak to upravím i pro neajaxové odkazy?
Jedná se o extension nad ajaxovými požadavky, takže to funguje jen pro ajax. Pro neajaxové odkazy musíš dopsat další event, např.:
$(function () {
$.nette.init();
$.nette.ext('confirm', {
before: function (xhr, settings) {
if (!settings.nette)
return;
var question = settings.nette.el.data('confirm');
if (question)
return confirm(question);
}
});
$(document).on('click', '[data-confirm]:not(.ajax)', function () {
var question = $(this).data('confirm');
if (question)
return confirm(question);
});
});
omlouvám se, že se ptám jak uplnej blbec, ale prostě v JS nejsem
zběhlý.
main.js upravený na:
$(function () {
$.nette.init();
$.nette.ext('confirm', {
before: function (xhr, settings) {
if (!settings.nette)
return;
var question = settings.nette.el.data('confirm');
if (question)
return confirm(question);
}
});
$(document).on('click', '[data-confirm]:not(.ajax)', function () {
var question = $(this).data('confirm');
if (question)
return confirm(question);
});
});
a odkaz pomocí ajaxu:
<a n:href="deleteImage! $reference->url, $reference->images_count, $i" class="ajax" data-ajax-confirm="ODSTRANIT vybraný obrázek?"></a>
odkaz bez ajaxu:
<a n:href=":Core:Reference:remove $reference->url" data-confirm="ODSTRANIT vybranou referenci?">Odstranit referenci</a>
Nebo jak to má být správně po úpravě? Protože mi to takto nefunguje správně...
V pohode.
Ten ajaxový odkaz teď nefunguje, protoze jsem změnil ten název data-*
atributu z "data-ajax-confirm" na "data-confirm" (ať je u obou druhu odkazů
pojmenován stejně).
měl jsem problem s obnovením js...prohlížeč si ho pamatoval:-D
Ale nyní již vše funguje jak má. Mockrát děkuji za trpělivost a ochotu
pomoct. Mrzí mi, že toto vlákno je již uzavřené a nemohu ti dát
ukončující řešení, ale mám založené vlákno, kde jsem tento problem
řešil puvodně, které nění ještě ukončené, tak můžeš něco napsat
tam ( Confirm okno) a dán ti body za řešení.
V pohode, neni zač
btw to neřeš, o nejake body mi tu nejde ...
Zobrazeno 20 zpráv z 20.