Kde mám chybu?

Ernst
25. říj 2015 00:12 - 25. říj 2015 00:13 #124130
Udělal jsem si modul typu vlastní obsah.
V něm mám
<div id="results"></div>
<form name="form">
 <input type="checkbox" name="form2" /> <span style="color: #999999;">Skryj moje umístění na mapě</span><br><br>
 <span style="font-size: 9pt;">&nbsp;<strong style="color: #999999; background-color:transparent;"><span style="color: #e4e4e4; font-family: Arial;">Jen pro</span></strong><span style="color: #8cc741; background-color: transparent;"><strong><span style="font-family: Arial;"> TOP</span></strong></span><strong style="color: #999999; background-color: #404041;"><span style="color: #e4e4e4; font-family: Arial;">&nbsp;nebo&nbsp;</span></strong><span style="color: #8cc741; background-color: transparent;"><strong><span style="font-family: Arial;">VIP</span></strong></span><strong style="color: #999999; background-color: transparent;"><span style="color: #e4e4e4; font-family: Arial;">&nbsp;uživatele:</span></strong></span><span style="font-size: 9pt; font-family: 'arial black', 'avant garde';" data-mce-bogus="1">&nbsp;<span id="_mce_caret" data-mce-bogus="1"><span style="background-color: transparent;" data-mce-bogus="1"></span></span></span>
 <input type="checkbox" name="form3"/> <span style="color: #999999;">Změň svoji pozici na mapě</span><br>
 <input type="checkbox" name="form4"/> <span style="color: #999999;">Skryj vzdálenost</span><br>
 <input type="checkbox" name="form5"/> <span style="color: #999999;">Skryj datum přihlášení</span><br>
 <input type="checkbox" name="form6"/> <span style="color: #999999;">Skryj koho jsem návštívil</span><br>
 <input type="checkbox" name="form7"/> <span style="color: #999999;">Skryj reklamy</span><br>
 <button  onclick="form(form2,form3,form4,form5,form6,form7)"><img src="../images/tl_refresh_a.png" /buttom>
</form>

<script>
function form(form2,form3,form4,form5,form6,form7){
 jQuery(function(){
			
	Query.ajax({
			url: '/components/com_lovefactory/models/lmenu.php',
			data: {d2: form2, d3: form2,d4: form4, d5: form5,d6: form6, d7: form7}
			}).done(function(data){
			   	jQuery('#results').html(data);
			}).fail(function(){
				jQuery('#results').html('AJAX selhal');
			});
		}, function(error){
			jQuery('#results').html(error.message);
		});
</script>

ajax mi nezavolá to dané php s požadovanými parametry.
Nevíte někdo, kde je chyba?

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Houbák
25. říj 2015 11:18 #124141
V js funkci form máte parametry form2,form3,form4,form5,form6,form7, které ale nemáte nikde definované. Zapněte si v prohlížeči konzolu s chybami a hned uvidíte, kde máte problém.

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
25. říj 2015 16:54 #124146
díky, konsole mi napíše:
Uncaught SyntaxError: Unexpected end of input
VM25767:1 Uncaught TypeError: Cannot read property 'childNodes' of undefined

A ty proměnný mám jak nadefinovat? já myslel, že když je pošlu jako parametr té funkce, tak je nadefinovaný mám.

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Cony
25. říj 2015 21:07 #124154
Nevypisujte sem celé kódy. Potřebujete-li poradit s principem, zjednodušte si kód třeba jen na jeden checkbox a čitelně jej naformátujte. Kdo se má prodírat tím dlouhým kódem a něco v něm hledat. ˇ

Ve funkci máte sice definované parametry form2 atd. ale v jejím volání je berete kde? Co je to zde to form2 atd...
<button  onclick="form(form2,form3,form4,form5,form6,form7)"><img src="../images/tl_refresh_a.png" /buttom>
Mimochodem ne /buttom ale /button

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
25. říj 2015 23:26 #124158
aha, proto to hlásilo tu chybu Unexpected end of input.
Myslel jsem, že napsáním v input je nadefinuji.
to je mám ještě předtím nadefinovat jako var?

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
25. říj 2015 23:41 #124159
nebo mám nadefinovat proměnné jako
var pr2 = document.form.form2.value
?

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
26. říj 2015 00:03 - 26. říj 2015 00:06 #124160
ale i když to udělám takhle, tak mi ten ajax nezavolá to php.
chyba musí být ještě někde jinde?
zjednodušený výpis
<div id="results"></div>
<form name="form">
 <input type="checkbox" name="form2" /> <span style="color: #999999;">Skryj moje umístění na mapě</span><br><br>
 <button  onclick="form()"><img src="../images/tl_refresh_a.png" /button>
</form>
<script>
function form({
var pr2 = document.form.form2.value
jQuery(function(){
			
	Query.ajax({
			url: '/components/com_lovefactory/models/lmenu.php',
			data: {d2: pr2}
			}).done(function(data){
			   	jQuery('#results').html(data);
			}).fail(function(){
				jQuery('#results').html('AJAX selhal');
			});
		}, function(error){
			jQuery('#results').html(error.message);
		});
</script>

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Cony
26. říj 2015 00:47 #124161
V místě volání žádná proměnná form2 neexistuje. Nepleťte si název input prvku s JavaScriptovou proměnou, nemá to spolu co dělat. Takže:
- ano, form 2 by muselo být nejprve deklarováno jako var form2.
- ano hodnotu do proměnné form2 musíte nejprve naplnit (používáte checkboxy, uvědomte si rozdíl mezi hodnotu a stavem checkboxu zaškrtnuto / nezaškrtnuto)
- chyba musí být TAKÉ někde jinde, co třeba středníky na konci řádek?

Máte ale jednoúčelovou funkci (alespoň to tak vypadá), tak proč to neřešit až přímo ve funkci (do té si poslat jen formulář - this.form). A nejlépe pomocí jQuery, když už ho používáte
jQuery(form).find('[name=form2]') ...

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
26. říj 2015 01:05 #124162
trošku se ztrácím, budu to muset nechat na ráno.
příkaz
var pr2 = document.form.form2.value nenaplní proměnnou pr2 hodnotou toho checkboxu?
to přeci také řeším až v té funkci
co vlastně přesně dělá jQuery(form).find('[name=form2]') ... , Vrátí výsledek toho pole?

středníky na konci stránek přebývají nebo chybí

konzole mi vypíše tohle:
Uncaught TypeError: form is not a functiononclick @ (index):177
Navigated to http://localhost/index.php/cs/?

Jaký je rozdíl mezi hodnotou a stavem checboxu? nebylo by nakonec jednodušší použít select ano/ne?
někde jsem možná četl že formulář odesílá hodnotu, jen když je checbox zaškrtnut?

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Cony
26. říj 2015 01:53 - 26. říj 2015 01:54 #124163

ernst napsal: var pr2 = document.form.form2.value nenaplní proměnnou pr2 hodnotou toho checkboxu?

Hodnotou ano, ale to neznamená zaškrtnuto / nezaškrtnuto.

ernst napsal: co vlastně přesně dělá jQuery(form).find('[name=form2]') ... , Vrátí výsledek toho pole?

vyhledá ve formuláři prvek s jménem form2 za tři tečky si doplňte co potřebujete s tím prvkem dělat (zjistit checked, zjistit hodnotu).

ernst napsal: středníky na konci stránek přebývají nebo chybí

Ne na konci stránek, ale na koci řádků v javaskriptu

ernst napsal: někde jsem možná četl že formulář odesílá hodnotu, jen když je checbox zaškrtnut?

Ano, ale vy neodesíláte formulář, ale zpracováváte ho v javaskriptu. Odesílaná data si tedy musíte pořešit sám.

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
26. říj 2015 18:42 #124185
díky, to mám zase chvíli, co studovat.
Jak jsem psal dříve, doufal jsem, že javascript se nebudu muset učit

Jde pomocí img zavolat php a tam si vše včetně javascriptu pořešit?
např.
var img = new Image();
img.src = "skript.php?a=1";

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Houbák
26. říj 2015 18:47 #124186
Prakticky na jakýkoliv prvek můžete dát onclick událost a zavolat přes AJAX php soubor...

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
26. říj 2015 19:06 #124187
právě to studuji
to php z formuláře mohu volat např.
<form name="form">
<input type="text" name="form2">
<input type="text" name="form3">
<a href="javascript:form();">OK</a>
</form>
<form action="send.php" method="GET">
<input type="text" name="prom1" />
<input type="text" name="prom2" />
<input type="submit" />
</form>

nebo co jsem použil já
<button  onclick="form()"><img src="../images/tl_refresh_a.png" /button>

ale proč se mi proboha nezavolá to php (mám na jeho začátku dán zápis do logu)

koukám na to a nemohu to vykoukat.
asi prvně zkusím místo checbox dát třeba select nebo text.
tam to snad bude srozumitelnější

nebo to zkusit napsat nějat takhle?
<form action="form-1.php" method="post">
Jméno: <input type="text" name="jmeno">
věk: <input type="text" name="vek">
<input type="submit" value="odeslat">
</form>
<?
$jmeno = $_POST['jmeno'];
$vek = $_POST['vek'];
?>
<p><? echo "$jmeno"; ?> je pěkné jméno i když je ti <? echo "$vek"; ?> let...</p>

ale mně se ten ajax líbí nejvíc

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
27. říj 2015 20:31 #124198
tak jsem to zkusil jiným způsobem

JS:
<form method="GET" action='/components/com_lovefactory/models/lmenutest.php' >
 <input type="checkbox" name="form2" /> <span style="color: #999999;">Skryj moje umístění na mapě</span><br>
<input type="checkbox" name="form3"/> <span style="color: #999999;">Změň svoji pozici na mapě</span><br>
<input type="submit"><img src="../images/tl_refresh_a.png">
pak php
<?php
define( '_JEXEC', 1 );
    if (!isset($_GET["form2"])) {$f2="off";} else {$f2=$_GET["form2"];}  ;
  var_dump($f2)   ;
   if (!isset($_GET["form3"])) {$f3="off";} else {$f3=$_GET["form3"];}  ;
  var_dump($f3)   ;

tak se mi to do toho php předá ok, mohu si to tam zapsat do databáze atd.
ale zůstane mi to na té volané stránce ) prázdná stránka ale já se potřebuji vrátit na tu původní stránku, ta ale může být pokaždé jiná

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.

Odpověď od Ernst
27. říj 2015 20:44 #124199
to jsem alespoň částečně vyřešil
stačí za to php dát
<script>
      javascript: history.go(-1)
      </script>

ale ta prodleva bílé stránky je na můj vkus dost dlouhá.
opravdu bych to rád vyřešil tím ajaxem, ale to by mně tady někdo musel trochu nakopnout, protože javascript se učím teprve třetí den

Pro možnost přispívání do fóra je nutné: Přihlásit se nebo Vytvořit účet.