Newsgroup: it.comp.lang.javascript
Titolo: jQuery: reagire a qualsiasi selezione sulla select

Ciao,
sto usando jQuery per fare un calendario un po' particolare.
Il calendario e` una table con tot caselle (td). Cliccando sul td (jQuery
('td').click(...) infilo un form con una select dentro il td, e l'utente 
puo` scegliere una delle voci (jQuery('select').change(...)).
Alla selezione viene inviata via .ajax() la selezione al server, che 
restituisce un pezzo di HTML da mettere nel td.
Tale "pezzo di HTML" puo` essere cambiato con lo stesso sistema, 
cliccandoci sopra e facendo riapparire la select.
Il problema e` che change() rileva solo il cambiamento rispetto al 
default, mentre se io riselezioni la stessa voce, nel td mi rimane la 
select e non il "pezzo di HTML" che ci andrebbe.
Come posso fare a rilevare qualsiasi selezione invece che solo il 
cambiamento?
Grazie.

 select e non il "pezzo di HTML" che ci andrebbe.
Esatto, perché è già selezionata. A livello di usabilità, si presuppone
che lo stato attuale sia il risultato delle scelte fatte dall'utente.
Quindi, se la select ha già una voce selezionata, quello che vede
l'utente in quel momento, dovrebbe essere esattamente quello che
vedrebbe se riselezionasse nuovamente la medesima voce selezionata.
Se questo non è il comportamento del proprio applicativo, probabilmente
c'è un errore di design di fondo e andrebbe rivisto.
Se per qualche motivo si desidera proprio che funzioni in questo modo...
Beh, ti posso suggerire di usare |onclick| al posto di |onchange|,
oppure di azzerare a livello di script il valore della select, prima di
visualizzarla nuovamente:
select.selectedIndex = -1;
-- 
"When you have eliminated the impossible, whatever remains, however
improbable, must be the truth."

 select.selectedIndex = -1;
Ho fatto i salti mortali per mettergli il selected per mostrare la scelta 
dell'utente! :)
Faro` qualche esperimento con il click (ma devo gestirmi da solo lo stato 
dei vari click e dove vengono fatti, select o option), altrimenti 
passero` a togliere il selectedIndex come mi consigli.
L'alternativa sarebbe aprire un "fumetto" come GoogleCalendar, ma volevo 
tenere il tutto leggero.
Grazie per l'aiuto.
Bye.

 cambiamento?
devi evitare di usare il tag <form> ed inviare i dati via ajax
acquisendo singolarmente ogni valore, in questo modo eviti che si
scatenino eventi conflittuali contemporaneamente.

 Grazie per l'aiuto.
De nada il NG è qui apposta, vediamo di usarlo. :)


 aggiungere logica addizionale rispetto al change che hai adesso.
Ho associato il click a ogni option:
$('select').children('option').click(function blablabla);
Funziona. Adesso lo testo su IE, so gia` che non funzionera` :)
Avevo provato anche a mettere $('select').val(-1) che dovrebbe 
corrispondere a select.selectedIndex = -1, ma mi ignorava completamente 
la prima voce (la <option value="0">).
Appena va online vi dico dov'e` cosi` mi dite se "usabilitamente" si 
poteva fare meglio. :)
Grazie ancora.
Bye.

 Funziona. Adesso lo testo su IE, so gia` che non funzionera` :)
dai un'occhiata qui può esserti utile:
http://stackoverflow.com/questions/149573/check-if-option-is-selected-with-jquery-if-not-select-a-default



Grazie, ma non era quello il problema. :)
L'impostazione dell'opzione selezionata ero gia` riuscito a farla. Il 
problema era proprio sull'onChange della select, che non veniva scatenato 
quando si riselezionava la stessa opzione.
Comunque, come previsto, IE non gradisce l'onClick sull'option (o almeno 
l'evento click di jQuery).
Ho aggirato lasciando sia l'onClick (per Firefox e gli altri) che 
l'onChange (per IE), che pero` reagisce solo ai cambiamenti. Pazienza, 
aggiorneranno il browser. ;)
Quando avro` piu` tempo (dopo il 21 dicembre 2012) magari lo sistemo.
Bye.

 Grazie ancora.
De nada.


 cognizione di causa. :)
OK, spero non ci siano troppi bug esposti:
http://pulirefacile.donnad.it/planner
Non massacratemi troppo, ma le critiche costruttive sono ben accette. :)
Grazie.
Bye.

 Ora faccio un esperimento. :)
stavo facendo anch'io degli esperimenti vedi:
http://oreste.parlatano.org/prove_js/select/
click option funziona bene solo su FF, adesso capisco che il problema
è intrigante e mi piacerebbe risolverlo, ci provo nei prossimi giorni.
Se hai tempo da un'occhiata all'esperimento così com'è adesso.

 è intrigante e mi piacerebbe risolverlo,
Come ho detto, basta usare il click sulla select. A memoria, sono
abbastanza certo che funzioni su IE - cosa che al momento non posso testare.
Nel caso in cui certi browser preferiscano il click sulle option, invece
che sulle select, dovrebbe bastare filtrare l'event target, ignorando la
select come target e prendendo invece le option.


 abbastanza certo che funzioni su IE - cosa che al momento non posso testare.
Puoi osservare la comparazione, il click select funziona su IE, FF ma
non con Chrome, quest'ultimo fa il brutto scherzo di scatenare il
click immediatamente prima della scelta del valore option. L'insieme
dei tre esempi ( 
http://oreste.parlatano.org/prove_js/select/
 ) mostra
un comportamento diverso a seconda del browser. Sono sorpreso da tali
differenze, non mi era ancora capitato di notarlo.

 Sono sorpreso da tali differenze, non mi era ancora capitato di notarlo.
Probabilmente perché ti sei perso l'epoca IE4/NS4, queste cose erano
all'ordine del giorno. ;)
