Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290

    Come passare i dati $POST alla pressione di un tasto

    Essendo superniubbo non riesco a fare una cosa che penso sia banale.
    In una form ho
    1) un bottone "vai"
    2) una textbox (in realtà è un'area jquerymobile autocompletata)

    In sostanza mentre si scrive nella textbox si apre una lista con varie informazioni

    codice:
    	<form action="/z/eseguifiltro.php" method="post">
    		<input type="submit" value="Vai">
    		
    	<label for="text-3">ID </label>
         <input type="text" data-clear-btn="true" name="id" id="ditta" value="">
    	
    	
    		<div data-role="content">
    			<h3>Informazione da cercare</h3>
    			<ul name='idprova' id="autocomplete" data-role="listview" data-inset="true" data-filter="true" data-filter-placeholder="Cerca una pratica..." data-filter-theme="d">[/list]
    		</div>
    	</form>
    Quello che vorrei fare, in sostanza, è alla pressione di "vai" venga eseguita una mia funzione che prenda il testo contenuto nella text box (o meglio i primi 5 caratteri) e che li passi al file eseguifiltro.php nel parametro $POST['id']

    Provo a riformulare: l'utente inserisce una porzione di nome dentro il campo testuale (es. nero) e si apre una lista con scritto

    12345 NERO Roma
    11112 NERONE Bologna
    33432 ARNERO Milano

    La prima parte (5 caratteri) sono la chiave del record.
    A questo punto l'utente sceglie dall'elenco ad esempio
    11112 NERONE Bologna
    => puff forrei chiamare eseguifiltro.php con $POST['id']=11112.

    Poi ci pensa eseguifiltro.php a fare quello che deve fare.

    Nell'esempio ho aggiunto una textbox "vera", la prima, che invece funziona.
    Se scrivo 11112 e clicco "cerca" tutto funziona bene.

    PS come si può capire mi sto arrabattando con un progetto non mio, non mi intendo di PHP


  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Invece di passare tutti e tre i dati nel autocomplete passagli solo l'id, comunque è un problema js/jquery con php non puoi risolvere
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290
    E' quindi il caso di spostare tutto nell'area javascript?
    Oppure apro una richiesta di là?

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Originariamente inviato da brancomat
    E' quindi il caso di spostare tutto nell'area javascript?
    Oppure apro una richiesta di là?
    Ripeto invece di popolare l'autocomplete con i tre dati passagli solo id, questo puoi farlo modificando l'autocomplete, ma se non hai un minimo di conoscenze io lascerei perdere.


    P.S. Meglio spostare usando il link "segnala ad un moderatore"
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290
    Originariamente inviato da cavicchiandrea
    Ripeto invece di popolare l'autocomplete con i tre dati passagli solo id, questo puoi farlo modificando l'autocomplete, ma se non hai un minimo di conoscenze io lascerei perdere.


    P.S. Meglio spostare usando il link "segnala ad un moderatore"
    Non mi è chiarissimo cosa significhi passare solo l'id: se riesco a far arrivare a PHP la stringa intera poi me la smazzo io.

    La domanda è in sintesi questa: come faccio per leggere (passare a PHP) il contenuto di una listview (di jquerymobile) autocomplete?

    Metto l'intero pezzo, togliendo le cose abbastanza inutili...

    codice:
    <!doctype html>
    <head>
    
    ... roba jquerymobile
    
        <script>
    	$( document ).on( "pageinit", "#page1", function() {
        $( "#autocomplete" ).on( "listviewbeforefilter", function ( e, data ) {
            var $ul = $( this ),
                $input = $( data.input ),
                value = $input.val(),
                html = "";
            $ul.html( "" );
            if ( value && value.length > 3 ) {
                $ul.html( "[*]<div class='ui-loader'><span class='ui-icon ui-icon-loading'></span></div>" );
                $ul.listview( "refresh" );
                $.ajax({
                    url: "json.php",   //questo è uno script che ritorna la stringa trovata nel database
                    dataType: "json",
                    data: {q: $input.val()},
    				async:false,
    				success: function ( response ) {
    				// qui in val ho la stringa che mi serve prendere!
                    $.each( response, function ( i, val ) {
                        html += "[*]" + val + "";
                    	});
                    $ul.html( html );
                    $ul.listview( "refresh" );
                    $ul.trigger( "updatelayout");
    				}
    	        });
            }
        });
    	$('#autocomplete').on('click','li',function(){
    		$('#autocomplete').empty();
    		
    		$('input[data-type="search"]').val($(this).text())
    		})
    });
    	</script>
        <style type="text/css">
    	.ui-listview-filter-inset {margin-top: 0;}
    	</style>
    </head>
    <body>
    
    
    	<div data-role="page" id="page1">
       
    		<div data-role="header" data-position="fixed" class="ui-header ui-bar-a ui-header-fixed fade ui-fixed-overlay" role="banner" style="top: 0px;">
    			indietro<h1>Ricerca autocompletamento</h1>
    		</div>
    
    	<!-- ecco qua: nel metodo POST riesco a "succhiare" (ossia passare in $POST) la variabile val della funzione di sopra al file eseguifiltro.php?
    -->
    		<form action="/z/eseguifiltro.php" method="post">
    			<input type="submit" value="Vai">
    		
    			<label for="text-3">ID </label>
    			<input type="text" data-clear-btn="true" name="id" id="ditta" value="">
    		
    			<h3>Informazione da cercare</h3>
    	
    		<ul name='idprova' id="autocomplete" data-role="listview" data-inset="true" data-filter="true" data-filter-placeholder="Cerca una pratica..." data-filter-theme="d">[/list]
    	
    		
    		</form>
    	</div>
    	
    </body>
    </html>
    In alternativa come faccio dalla funzione callback che popola la lista a mettere qualcosa qui?
    codice:
    			<label for="text-3">ID </label>
    			<input type="text" data-clear-btn="true" name="id" id="ditta" value="">
    In pratica, se non riesco in altro modo, vorrei che OLTRE alla lista venisse popolato il campo "normale", poi dando INVIO (il submit visto che c'è un solo bottone) => da lì parte tutto il giro del mondo.

    Qualcosa del tipo contenuto-del-campo-X=val


  6. #6
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Non conosco jquery.mobile, ma di norma per inviare un response ajax al server o l'invii tramite querystring tuapagina.php?dato=valore oppure l'inserisci in un campo form e invii lo stesso nel formato che vuoi post/get.
    Ma visto che i dati che ricevi da ajax sono sul server perché non li usi prima di rimandarli al browser?
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  7. #7
    Utente bannato
    Registrato dal
    Jul 2013
    Messaggi
    290
    Mi autorispondo.
    Innanzitutto ho scritto una funzione javascript cui, passando un ID separato da uno spazio, ritorna l'ID
    In pratica il json spara fuori stringhe del tipo

    11123-SPAZIO-blablabla
    Cerco il primo spazio e, se lo trovo, ritorno la stringa fino a quel punto

    codice:
    function prendiID(i_stringa)
    {
      var posizioneSpazio=i_stringa.indexOf(" ");
      if (posizioneSpazio===-1) {
         return 0;
      }			
      return i_stringa.substring(0,posizioneSpazio);
    }
    Per quanto riguarda l'altro problema, ovvero popolare un campo textbox (che poi verrà "trasformato" al submit in un parametro POST per uno script PHP), ho fatto così.
    In sostanza all'evento onclick (quando l'utente sceglie dalla listbox una riga) "spacchetto" la stringa con la funzione precedente e setto il relativo textbox

    codice:
    $('#autocomplete').on('click','li',function(){
      document.getElementById('ditta').value = prendiID($(this).text());
      $('#autocomplete').empty();
      $('input[data-type="search"]').val($(this).text())
    })
    Non so se è il metodo più elegante, ma bene o male mi sono arrabattato

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.