Input date onchange non funziona su iOS

di il
5 risposte

Input date onchange non funziona su iOS

Ciao!

ho questo codice per intercettare la scelta della data su una input date:

<input type="date" onchange="document.location.href='prenotazioni.php?id=<?php echo $id; ?>&giorno=' + this.value">
su pc e android funziona.
su ipad no.
in pratica appena fai il tap sulla input, la pagina viene ricaricata senza darti la possibilità di scegliere la data.
avete qualche idea su come risolvere??

5 Risposte

  • Re: Input date onchange non funziona su iOS

    fermat ha scritto:


    ho questo codice per intercettare la scelta della data su una input date:
    Mi sembra una scelta un po' infausta quella di usare un controllo di input per selezionare una data a scopo di visualizzazione (invece che come campo da inviare al server assieme ad altri dati), per diversi motivi.

    Generalmente, la presenza di controlli di input richiede anche che sia presente un form in grado di inviare quell'informazione.
    Magari potresti aggiungerlo, con metodo GET (forse qui è meglio visto che lo usi per filtrare) o POST, che punti alla pagina delle prenotazioni e invii la data selezionata come parametro del filtro, aggiungendo anche un pulsante di submit.

    Una seconda scelta "pericolosa" è data dall'uso dell'<input> di tipo "date" di HTML5: non tutti i browser lo supportano appieno o con le stesse impostazioni/comportamenti, ed è anche suscettibile sulla scelta della lingua (quindi potrebbero arrivarti valori in formati diversi da quelli che ti aspetti). Io opterei ancora per un normale <input> di tipo "text" standard, usando eventualmente un plugin (es. JQuery) per abilitare la visualizzazione del calendario, o ancora meglio visualizzerei direttamente il calendario stesso nella pagina, così puoi gestire tutto al clic sul giorno invece che sul "change" del valore.

    Ciao!
  • Re: Input date onchange non funziona su iOS

    Ciao.

    non devo inviare dati ad un database, ma semplicemente la pagina fa questo:
    - se in query string non c'è il giorno, mi prendi gli ultimi 20 records
    - se c'è, mi prendi i records del giorno

    sinceramente trovo scomodo fare questo usando un form e i dati in post.
    quindi, la cosa più veloce è scegliere la data e refreshare la pagina con la data.
    potrei aggiungere un tasto link che fa il refresh, invece di intercettare l'onchange.

    per quanto riguarda la input date HTML, personalmente lo sto usando sempre, e non sto riscontrando problemi con nessun browser moderno.
    se poi qualcuno usa IE7 (per esempio) non lo tengo in considerazione.
    scelta personale condivisa coi clienti.
    personalmente, forse sbagliando eh, ho smesso di essere compatibile 100% con tutti i browser.
    per gli altri browser non ho riscontrato nessun problema (chrome, firefox, seamonkey, safari, ecc).

    in questo caso specifico il problema pare essere l'evento onchange e safari.
    qualcuno suggerisce onblur, ma trovo scomodo anche quello su android (non l'ho testato su iOS).
  • Re: Input date onchange non funziona su iOS

    fermat ha scritto:


    non devo inviare dati ad un database
    Non è obbligatorio inviare dati a un database: basta ad esempio acquisire i dati di un filtro di ricerca.

    fermat ha scritto:


    sinceramente trovo scomodo fare questo usando un form e i dati in post.
    Il form è solo un banale elemento <form> che racchiude gli elementi <input> di definizione del filtro, che al momento è composto da un solo campo contenente la data del giorno che ti interessa.

    I dati possono essere inviati anche in GET, anzi in questo caso - trattandosi di filtro - credo che sia la scelta giusta.

    In breve, l'URL che contiene i dati del filtro non viene composto in modo farraginoso mescolando un po' di HTML, JavaScript e addirittura PHP, ma viene definito automaticamente dal browser mettendo al suo interno le informazioni contenute nel form, che potrebbe includere campi "hidden" con ulteriori dati da specificare nel query string, assieme alla data selezionata di cui si è già parlato.

    Non vedo la scomodità, bensì una funzionalità del tutto equivalente ma con un'adesione migliore agli standard, e quindi maggiori possibilità di avere dal browser (qualunque esso sia) un comportamento corretto, atteso e uniforme.

    fermat ha scritto:


    quindi, la cosa più veloce è scegliere la data e refreshare la pagina con la data.
    In questo caso, nulla vieterebbe di generare un calendario intabellato direttamente nella pagina, proponendo un link per ogni giorno che richiami la pagina stessa indicando la data corrispondente, senza dover usare un controllo di input e gestirne gli eventi.

    fermat ha scritto:


    potrei aggiungere un tasto link che fa il refresh, invece di intercettare l'onchange.
    Esatto: quello sarebbe appunto l'<input> o il <button> di tipo "submit" che invia i dati del filtro in GET e ottiene la pagina aggiornata.

    fermat ha scritto:


    per quanto riguarda la input date HTML, personalmente lo sto usando sempre, e non sto riscontrando problemi con nessun browser moderno.
    Io ho aperto ora 3 browser differenti e in nessuno di questi appare allo stesso modo graficamente, oltre al fatto che un paio di browser hanno una lingua diversa dall'italiano come impostazione predefinita e quindi inseriscono una data "invertita" nel giorno e nel mese rispetto agli altri.

    Oltre a questo, tu dici di non aver riscontrato alcun problema, ma la discussione attuale è stata aperta proprio per questo motivo.

    fermat ha scritto:


    se poi qualcuno usa IE7 (per esempio) non lo tengo in considerazione.
    Si è detto "moderni".

    fermat ha scritto:


    personalmente, forse sbagliando eh, ho smesso di essere compatibile 100% con tutti i browser.
    Non è una scelta che puoi fare tu, ma può essere dettata solo dai requisiti: se il cliente accetta la compatibilità con un singolo browser, tanto meglio per te. Se invece si tratta di qualcosa che deve raggiungere un bacino più ampio, non garantire questo aspetto significa perdere delle quote e quindi del denaro.

    fermat ha scritto:


    in questo caso specifico il problema pare essere l'evento onchange e safari.
    qualcuno suggerisce onblur, ma trovo scomodo anche quello su android (non l'ho testato su iOS).
    Questo è quello a cui mi riferivo dicendo che "non tutti i browser gestiscono questi nuovi controlli allo stesso modo".
    Se vengono adottati, occorre lavorarci, si spera per pochi anni a venire.

    Ciao!
  • Re: Input date onchange non funziona su iOS

    Allora, chiarisco.
    io non ho mai avuto problemi nell'usare input date in un contesto "normale" in cui si usa per l'invio di dati ad una pagina, db, ecc.
    ad esempio non ho riscontrato problemi nella formattazione della data quando invio la data scelta.
    e non ho avuto problemi nella registrazione dei dati su un db.
    che si veda diversamente sui browser non mi interessa granchè, e non lo vedo un problema sinceramente.

    nello specifico, il problema è proprio l'evento onchange, che si comporta in maniera diversa su safari (tra l'altro su iOS).
    ma l'ho bypassato aggiungendo un tasto che mi fa quello che doveva fare l'onchange.
    per il resto funziona tutto, quindi preferisco continuare ad usare input date, piuttosto che aggiungere l'ennesimo plugin (purtroppo si aggiungono plugin per ogni cosa ormai, e il rischio è che vadano fuori controllo, un pò come succede con molti siti fatti con wordpress ad esempio).

    l'idea di un calendario aperto nella pagina non è male.
    solo che mi hanno richiesto di visualizzare solo la lista nella pagina, e quindi ho optato per la input + bottone.

    per compatibilità di certo non intendo singolo browser.
    ma di "mollare" quelli obsoleti.
    trovo inutile ammazzarsi per browser obsoleti, ma di certo tutto deve funzionare con safari / firefox / chrome, ecc (come da post).
    sempre ovviamente in accordo col cliente.

    cmq problema risolto col bottone.
    ciao!
  • Re: Input date onchange non funziona su iOS

    fermat ha scritto:


    io non ho mai avuto problemi nell'usare input date in un contesto "normale" in cui si usa per l'invio di dati ad una pagina, db, ecc.
    ad esempio non ho riscontrato problemi nella formattazione della data quando invio la data scelta.
    e non ho avuto problemi nella registrazione dei dati su un db.
    Questo perché il supporto dei browser ha fatto passi da gigante nel supporto agli elementi HTML5, però questo è avvenuto solo in tempi molto recenti e fino a pochi mesi fa la situazione non era assolutamente stabile da questo punto di vista.

    fermat ha scritto:


    che si veda diversamente sui browser non mi interessa granchè, e non lo vedo un problema sinceramente.
    Non mi riferivo all'aspetto, o meglio non solo a quello, ma anche al comportamento, tant'è vero che una "incongruenza" l'hai rilevata tu stesso.

    fermat ha scritto:


    per il resto funziona tutto, quindi preferisco continuare ad usare input date, piuttosto che aggiungere l'ennesimo plugin (purtroppo si aggiungono plugin per ogni cosa ormai, e il rischio è che vadano fuori controllo, un pò come succede con molti siti fatti con wordpress ad esempio).
    Se poni la compatibilità con determinati browser un requisito che i tuoi clienti accettano di buon grado, sei a posto.
    E' ovvio che la mia raccomandazione si riferiva a un contesto ben più generico e allargato, fermo restando che non stiamo parlando di plugin WordPress ma di implementazioni JavaScript uguali a quella che ti sei scritto praticamente a mano, solo fatta da terzi, e che comunque ha il valore di risultare uguale "by design" come aspetto e comportamento su qualsiasi browser. Tutto qui.

    Chiaro che se tutti i tuoi clienti usano lo stesso browser, sugli stessi device e con la stessa lingua nella combinazione che utilizzi per collaudare il sito, non ci saranno (ipoteticamente) mai problemi.

    Ciao!
Devi accedere o registrarti per scrivere nel forum
5 risposte