Pereiti prie turinio

jQuery neveikia .click()


Rekomenduojami pranešimai

Sveiki,

koduoju prisijungimo sistemą su jQuery, kad kai vartotojas prisijungia nereiktų perkrauti viso puslapio. Parašiau 2 funkcijas, viena tik užkrovus puslapį patikrina ar vartotojas nėra prisijungęs, o kita siunčia duomenis į serverį paspaudus 'sign in' mygtuką. Man reikia, kad veiktų maždaug toks kodas:

<head></head>
<body>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.0/jquery.min.js"></script>

<script type="text/javascript" >
$(document).ready(function(){ 



$.post("/index.php/login/login_status", function(xml){

// patikrint, ar prisijungta, jei ne, parodyti prisijungimo forma
$("#login_box").html("<form method='post'>"+
	"Username:<input id='username' type='text' name='username' size='8' /> "+
	"Password:<input id='password' type='password' name='password' size='8' /> "+
	"<input type='submit' value='sign in' id='btn_login'/><br>"+	 
	"</form>");	

},"xml");

});

$(function() { 
 $('#btn_login').click(function() { //  iregistruoti vartotoja kai paspaudzia 'sign in'
   // ...
$("#login_box").html("Logged in");
return false;
});
});
</script>

<div id='login_box'>
 <!-- Cia jquery des html !-->
</div>

</body>

Pirmoji dalis lyg ir veikia, tačiau paspaudus 'sign in' mygtuką taip ir neparodo užrašo logged in. Kiek suprantu $('#btn_login').click() funcija nėra iškviečiama. Keisčiausia, kad va toks kodas veikia:

<head></head>
<body>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.0/jquery.min.js"></script>

<script type="text/javascript" >
$(document).ready(function(){ // tik uzkrovus puslapi patikrinti ar vartotojas prisiregistraves

// prisijungimo forma ne .post fukcijoje
$("#login_box").html("<form method='post'>"+
	"Username:<input id='username' type='text' name='username' size='8' /> "+
	"Password:<input id='password' type='password' name='password' size='8' /> "+
	"<input type='submit' value='sign in' id='btn_login'/><br>"+	 
	"</form>");		

$.post("/index.php/login/login_status", function(xml){
// ...

},"xml");

});

$(function() { 
 $('#btn_login').click(function() {
   // ...
$("#login_box").html("Logged in");
return false;
});
});
</script>

<div id='login_box'>
 <!-- Cia jquery des html !-->
</div>

</body>

Su šiuo kodu paspaudus 'sign in' atsiranda užrašas 'logged in'

 

Gal žinot kame čia problema? Nes jau sėdžiu puse dienos ir nieko naujo nesugalvoju :unsure: Jaučiu yra kažkokia žiopla klaida, nes jQuery mokausi tik trečią dieną :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

$(function() { 
 $('#btn_login').click(function() { //  iregistruoti vartotoja kai paspaudzia 'sign in'
   // ...
       $("#login_box").html("Logged in");
return false;
});

neveikiančiame kode yra įvykdomas ankščiau, nei

 $("#login_box").html("<form method='post'>"+
               "Username:<input id='username' type='text' name='username' size='8' /> "+
               "Password:<input id='password' type='password' name='password' size='8' /> "+
               "<input type='submit' value='sign in' id='btn_login'/><br>"+     
               "</form>"); 

Nes antrasis kodo blokas yra callback, ir jis yra iššaukiamas tik tada, kai atliekamas POST metodas.

 

FIX:

 

$.post("/index.php/login/login_status", function(xml){

// patikrint, ar prisijungta, jei ne, parodyti prisijungimo forma
$("#login_box").html("<form method='post'>"+
               "Username:<input id='username' type='text' name='username' size='8' /> "+
               "Password:<input id='password' type='password' name='password' size='8' /> "+
               "<input type='submit' value='sign in' id='btn_login'/><br>"+     
               "</form>"); 
 $('#btn_login').click(function() {
    $("#login_box").html("Logged in");
    return false;
 }               
},"xml");

});

 

Su sintakse, jei bus klaidų, susitvarkysi pats.

Redagavo nagisa
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dabar neveikia $.post funkcija

function btn_login_click()
{
   var username=$("#username").val();
   var password=$("#password").val();	  

   var datastr="username="+username+"&password="+password;
     // alert("Username: "+username+"\nPassword: "+password);	   

   $.post("/index.php/login",datastr, function(xml)
   {
        // si funkcija niekada neiskvieciama
     	alert("veikia");
   }
   ,"xml");

}



$(document).ready(function(){

$("#login_box").html("<form method='post' id='login_form'>"+
	"Username:<input id='username' type='text' name='username' size='8' /> "+
	"Password:<input id='password' type='password' name='password' size='8' /> "+
	"<input type='submit' value='sign in' id='btn_login'/><br>"+		
	"<a href='main.html'>[register] </a>	"+	 
	"</form>");	


$('#btn_login').click(btn_login_click);


});

btn_login_click() funkcijoje $.post() neveikia

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dabar neveikia $.post funkcija

function btn_login_click()
{
   var username=$("#username").val();
   var password=$("#password").val();	  

   var datastr="username="+username+"&password="+password;
     // alert("Username: "+username+"\nPassword: "+password);	   

   $.post("/index.php/login",datastr, function(xml)
   {
        // si funkcija niekada neiskvieciama
     	alert("veikia");
   }
   ,"xml");

}



$(document).ready(function(){

$("#login_box").html("<form method='post' id='login_form'>"+
	"Username:<input id='username' type='text' name='username' size='8' /> "+
	"Password:<input id='password' type='password' name='password' size='8' /> "+
	"<input type='submit' value='sign in' id='btn_login'/><br>"+		
	"<a href='main.html'>[register] </a>	"+	 
	"</form>");	


$('#btn_login').click(btn_login_click);


});

btn_login_click() funkcijoje $.post() neveikia

1. Naudok $('form').serialize(), nesudarinėk užklausų rankomis...

2. Naudok Developer Tools/Firebug - ten sužinosi viską ko reik, rodo ir klaidas ir ką siunčia.

3. Kai kyla tokios problemos, tai būk malonus, pasivargink http://jsfiddle.net/ užpildyti kuo daugiau laukelių ir paspaudęs Save pasidalink nuoroda..

Nuoroda į pranešimą
Dalintis kituose puslapiuose

1. Naudok $('form').serialize(), nesudarinėk užklausų rankomis...

2. Naudok Developer Tools/Firebug - ten sužinosi viską ko reik, rodo ir klaidas ir ką siunčia.

3. Kai kyla tokios problemos, tai būk malonus, pasivargink http://jsfiddle.net/ užpildyti kuo daugiau laukelių ir paspaudęs Save pasidalink nuoroda..

1. ok, taip ir padariau.

2. Tikrinau su chrome.

3. ok, žinosiu kitą kartą.

 

Panašu, kad reikia blokuojančios funkcijos, pvz. šis kodas veiks

 function btn_login_click()
{
   var datastr=$("#login_form").serialize();

	 $.ajax({
	   type: "POST",
	   url: "/index.php/login",
	   async: false, // <--- laukti, kol $.ajax funkcija pabaigs darbą
	   data: datastr,
	   dataType: "xml",
	   success: function(xml,status){

		//  alert( "status: " + xml );
		login_status(xml);			
	   }
	 });
}

o neblokuojanti funkcija neveiks

 function btn_login_click()
{
   var datastr=$("#login_form").serialize();

	 $.ajax({
	   type: "POST",
	   url: "/index.php/login",
	   async: false, // <--- iškart vykdyti kodą toliau po $.ajax funkcija
	   data: datastr,
	   dataType: "xml",
	   success: function(xml,status){

		//  alert( "status: " + xml );
		login_status(xml);			
	   }
	 });
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

1. ok, taip ir padariau.

2. Tikrinau su chrome.

3. ok, žinosiu kitą kartą.

 

Panašu, kad reikia blokuojančios funkcijos, pvz. šis kodas veiks

 function btn_login_click()
{
   var datastr=$("#login_form").serialize();

	 $.ajax({
	   type: "POST",
	   url: "/index.php/login",
	   async: false, // <--- laukti, kol $.ajax funkcija pabaigs darbą
	   data: datastr,
	   dataType: "xml",
	   success: function(xml,status){

		//  alert( "status: " + xml );
		login_status(xml);			
	   }
	 });
}

o neblokuojanti funkcija neveiks

 function btn_login_click()
{
   var datastr=$("#login_form").serialize();

	 $.ajax({
	   type: "POST",
	   url: "/index.php/login",
	   async: false, // <--- iškart vykdyti kodą toliau po $.ajax funkcija
	   data: datastr,
	   dataType: "xml",
	   success: function(xml,status){

		//  alert( "status: " + xml );
		login_status(xml);			
	   }
	 });
}

Dar vienas dalykas - venk blokavimo naudojimo, nes tuo metu vartotojas sėdi su... pavadinkime padvėsusia naršykle. Jei jau reikia, viską daryk callback'uose, o jei neišeina, tai perrašyk kodą iš naujo.

Redagavo nagisa
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...