Jump to content
cromax

Javascript true e false

Recommended Posts

cromax

Boas,

Eu tenho um formulário que é "comandado" por uma função de Javascript, nela está inserido o seguinte código:

$("#add-point").submit(function(){
geoEncode();
return false;
});

E quando eu mudo o "return false" para true (para poder mudar de página no formulário) a função do javascript já não é concretizada. Qual é que é o problema?

Desde já, obrigado  :D

Share this post


Link to post
Share on other sites
brunoais

Que função? geoEncode()?


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
cromax

Que função? geoEncode()?

Sim, exactamente.

como sabes que não é executada ?

Porque os dados que são adquiridos por geoEncode() não carregam na base de dados.

Este é o código de javascript:

$(function(){
var map = new GMap2(document.getElementById('map'));
var santaremPT = new GLatLng(39.236412,-8.683405);
map.setCenter(santaremPT, 1);
var bounds = new GLatLngBounds();
var geo = new GClientGeocoder();

var reasons=[];
reasons[G_GEO_SUCCESS] = "Success";
reasons[G_GEO_MISSING_ADDRESS] = "Missing Address";
reasons[G_GEO_UNKNOWN_ADDRESS] = "Unknown Address.";
reasons[G_GEO_UNAVAILABLE_ADDRESS]= "Unavailable Address";
reasons[G_GEO_BAD_KEY] = "Bad API Key";
reasons[G_GEO_TOO_MANY_QUERIES] = "Too Many Queries";
reasons[G_GEO_SERVER_ERROR] = "Server error";

// initial load points
$.getJSON("map-service.php?action=listpoints", function(json) {
if (json.Locations.length > 0) {
for (i=0; i<json.Locations.length; i++) {
var location = json.Locations[i];
addLocation(location);
}
zoomToBounds();
}
});

$("#add-point").submit(function(){
geoEncode();
return false;
});

function savePoint(geocode) {
var data = $("#add-point :input").serializeArray();
data[data.length] = { name: "lng", value: geocode[0] };
data[data.length] = { name: "lat", value: geocode[1] };
$.post($("#add-point").attr('action'), data, function(json){
$("#add-point .error").fadeOut();
if (json.status == "fail") {
$("#add-point .error").html(json.message).fadeIn();
}
if (json.status == "success") {
$("#add-point :input[name!=action]").val("");
var location = json.data;
addLocation(location);
zoomToBounds();
}
}, "json");
}

function geoEncode() {
var address = $("#add-point input[name=address]").val();
geo.getLocations(address, function (result){
if (result.Status.code == G_GEO_SUCCESS) {
geocode = result.Placemark[0].Point.coordinates;
savePoint(geocode);
} else {
var reason="Code "+result.Status.code;
if (reasons[result.Status.code]) {
reason = reasons[result.Status.code]
}
$("#add-point .error").html(reason).fadeIn();
geocode = false;
}
});
}







}




);

Share this post


Link to post
Share on other sites
HappyHippyHippo

confirmas que alterando para return true as alterações são feitas na base da dados ?

tens a certeza que são feitas dentro do geoEncode() e não no script chamada pelo submit ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
cromax

confirmas que alterando para return true as alterações são feitas na base da dados ?

tens a certeza que são feitas dentro do geoEncode() e não no script chamada pelo submit ?

Eu não percebi muito bem a tua pergunta, mas quando eu altero para return true, a longitude e a latitude (que pelo o que eu percebo são obtidas através desse código javascript (ou jquery?)) não carregam na base de dados, apenas carrega as outras informações que são "postadas" no formulário.

P.S.- Isto é uma API do Google Maps

Share this post


Link to post
Share on other sites
HappyHippyHippo

O que estou a dizer é que a diferença entre true e false é simplesmente a execução do submit for form ..

Se retornar true então é feito o request, e caso contrário de false.

Não é de esperar que o retorno da função determine o processo chamada pela função geoEncode().

É por essa razão que perguntei :

tens a certeza que são feitas dentro do geoEncode() e não no script chamada pelo submit ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
cromax

Então tu estás a querer dizer que a função GeoEncode não é a que vai buscar a latitude e a longitude?

Se eu apagar essa função, já não é carregada a lat e lng. Tal como se mudar o return false para true.

P.S- Desculpa a minha burrice  😳

Share this post


Link to post
Share on other sites
HappyHippyHippo

o que estou a dizer é:

não sei o que o script chamado pelo submit faz ... logo o problema pode ser ai.


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
cromax

Pois, então não tens ideia de qual seja o problema?

Então vou perguntar noutro fórum e depois quando descobrir digo o que foi.

Obrigado pela tua ajuda.  :(

Share this post


Link to post
Share on other sites
HappyHippyHippo

é impossível saber a razão por falta de informação !!!

é obvio que o problema não está no true ou false ... eu estou a dizer para fazeres um debuging mais "fino" principalmente no script chamada pelo submit porque é a única parte do código que não fizeste post ...


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
cromax

OK.

<div id="map"></div>
<ul id="list"></ul>
<div id="message"></div>
<form action="<?php echo $editFormAction; ?>" method="post" name="add-point" id="add-point">
  <table width="100%" border="0" cellpadding="3" cellspacing="3">
    <tr>
      <td valign="top" class="Lateral">Localização</td>
      <td valign="top"><table border="0" cellpadding="2" cellspacing="0">
          <tr valign="baseline">
            <td nowrap="nowrap" align="right">País:</td>
            <td><select name="Regiao">
                <option value="Portugal" <?php if (!(strcmp("Portugal", ""))) {echo "SELECTED";} ?>>Portugal</option>
              </select>
            </td>
          </tr>
          <tr valign="baseline">
	  <input type="hidden" name="action" value="savepoint" id="action">
            <td nowrap="nowrap" align="right">Localidade:</td>
            <td><input name="name" type="text" id="name" size="20" /></td>
          </tr>
          <tr valign="baseline">
            <td nowrap="nowrap" align="right"> </td>
            <td> </td>
          </tr>
        </table></td>
    </tr>
    <tr>
      <td valign="top" class="Lateral"> </td>
      <td valign="top"><table border="0" cellspacing="0" cellpadding="2">
          <tr>
            <td>Rua:</td>
            <td>
              <input name="address" type="text" id="address" size="15" />
              <span class="textfieldRequiredMsg">Campo obrigatório.</span><span class="textfieldInvalidFormatMsg">Formato inválido.</span></span></td>
          </tr>
          <tr>
            <td>Nº:</td>
            <td><span id="spryarea">
              <input name="N" type="int" id="N" size="15" />
              <span class="textfieldRequiredMsg">Campo obrigatório.</span><span class="textfieldInvalidFormatMsg">Formato inválido.</span></span></td>
          </tr>
          <tr>
            <td> </td>
            <td> </td>
          </tr>
          <tr>
            <td>CodigoPostal</td>
            <td><span id="Id">
              <input type="int" name="CodigoPostal" id="CodigoPostal" />
              <span class="textfieldRequiredMsg">Campo obrigatório.</span></span></td>
          </tr>
        </table></td>
    </tr>
    <tr>
      <td valign="top"><input type="button" name="button4" id="button4" value="Cancelar" onclick="link;" /></td>
      <td align="right" valign="top"><input name="Submit" type="submit" value="Seguinte >" /></td>
    </tr>
  </table>

E o tutorial de onde tirei isto está aqui:

http://marcgrabanski.com/article/jquery-google-maps-tutorial-ajax-php-mysql

Share this post


Link to post
Share on other sites
HappyHippyHippo

é impossível saber a razão por falta de informação !!!

é obvio que o problema não está no true ou false ... eu estou a dizer para fazeres um debuging mais "fino" principalmente no script chamado pelo submit porque é a única parte do código que não fizeste post ...


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
cromax

Não sei o que queres, não percebo.

A única coisa que me falta inserir é isto:

if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "add-point")) {
  $insertSQL = sprintf("INSERT INTO tab_enderecos (Regiao, Cidade_Localidade, Rua, N, CodigoPostal, lat, lng) VALUES (%s, %s, %s, %s, %s, %s, %s)",
                       GetSQLValueString($_POST['Regiao'], "text"),
                       GetSQLValueString($_POST['name'], "text"),
                       GetSQLValueString($_POST['address'], "text"),
                       GetSQLValueString($_POST['N'], "int"),
                       GetSQLValueString($_POST['CodigoPostal'], "int"),
				   GetSQLValueString($_POST['lat'], "double"),
				   GetSQLValueString($_POST['lng'], "double"));

Share this post


Link to post
Share on other sites
HappyHippyHippo

$("#add-point").submit(function(){

Esta função é chamada quando existe e evento do submit do form.

O que estou a dizer é:

A função geoEncode() é chamada e deve correr tudo direitinho como disseste. O que difere no true ou false, é se o form é "seguido" e o submit é processado :

- caso false, o script apontado no campo action do form não é chamado.

- caso for true, o script apontado no campo action do form é chamado.

Visto que a função corre correctamente quando tens false, o problema só pode ser posterior à chamada do geoEncode(). E a úncia coisa que falta saber (e é o que ando a pedir !!!) é o script apontado pelo form para saber se a base de dados está a ser actualizada nesse passo seguinte.


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.