Domanda

Modifica: Spiegherò il mio problema meglio:

Ho un multiplo Seleziona creato con JQuery-Plugin -> scelto. Creo le opzioni all'interno della selezione con AJAX + PHP + MySQL e questo:

$("#Enmarcado").append(array_items[x]); //inside a loop
[...]
$("#Enmarcado").trigger("chosen:updated");
.

Ora, con la selezione creata, voglio convalidare quali opzioni è possibile selezionare:

Questa è la mia selezione (HTML creata da AJAX + PHP + MYSQL)

<select id="Enmarcado" name="Enmarcado" data-placeholder="Elije los acabados..." class="chosen-select" multiple="" onchange="validar_enmarcado();">
    <option selected="" value="-1">Sin Acabados</option>
    <option value="20">Kappa-fix 10mm (PVC)</option>
    <option value="19">Kappa-fix 5mm (PVC)</option>
    <option value="18">Laminado mate (75 micras producción)</option>
    <option value="17">Laminado brillo (75 micras producción)</option>
    <option value="16">Laminado mate (30-50 micras)</option>
    <option value="15">Laminado brillo (30-50 micras)</option>
    <option value="14">Plastificado brillo (125 micras)</option>
    <option value="13">Plastificado brillo (75 - 80 micras)</option>
    <option value="11">Adhesivado</option>
    <option value="7">Kappa-fix 10 mm (cartón pluma alta densidad)</option>
    <option value="6">Kappa-fix 5 mm (cartón pluma alta densidad)</option>
    <option value="5">Laminado Mate (proteccion uv)</option>
    <option value="4">Laminado Brillo (proteccion uv)</option>
    <option value="3">Aluminio</option>
    <option value="2">Bastidor 4 cm</option>
    <option value="1">Bastidor 2 cm</option>
    <option value="9">Dibond 3mm (sandwich aluminio + pvc)</option>
</select>
.

La prima opzione è assoluta: se lo si seleziona, cancella tutte le altre opzioni.

<option selected="" value="-1">Sin Acabados</option>
.

Ma se ho selezionato questa opzione, voglio eliminarlo e lascia la nuova opzione selezionata quando seleziono un'altra opzione:

<option selected="" value="-1">Sin Acabados</option> <!-- Selected yet -->
<option value="20">Kappa-fix 10mm (PVC)</option> <!-- I want select this, clearing value =-1 from the selected options. -->
.

La mia funzione di convalida:

Edit2:

function validar_enmarcado(){
    var obj = document.getElementById ("Enmarcado");
    var enmarcado = new Array();

    var i = 0;
    var u = 0;
    var y = 0;
    var cont = 0;
    var opt1 = "";
    var opt2 = "";

    enmarcado = obj.selectedOptions;
    if(enmarcado.length>1){
        for (i=0; opt1=enmarcado[i];i++){
            for (u=i+1; opt2=enmarcado[u];u++){
                if(opt1.value == -1){
                    if(opt2.value >= 1){
                        $("#Enmarcado").chosen();
                        $("#Enmarcado").val(-1).trigger("chosen:updated");
                        jAlert("Si elige Sin Acabados, no puede haber acabados en la lista.","Error de Acabado");
                    }
                }
                if(opt1.value == 6 || opt1.value == 7 || opt1.value == 9 || opt1.value == 19 || opt1.value == 20){
                    if(opt2.value == 6 || opt2.value == 7 || opt2.value == 9 || opt2.value == 19 || opt2.value == 20){
                        jAlert("No puede elegir dos Soportes al mismo tiempo, elimino uno.","Error de Acabado");
                    }
                }
                if(opt1.value == 1 || opt1.value == 2){
                    if(opt2.value == 1 || opt2.value == 2){
                        jAlert("No puede elegir dos Bastidores al mismo tiempo, elimino uno.","Error de Acabado");
                    }
                }
                if(opt1.value == 4 || opt1.value == 5 || opt1.value == 13 || opt1.value == 14 || opt1.value == 15 || opt1.value == 16 || opt1.value == 17 || opt1.value == 18){
                    if(opt2.value == 4 || opt2.value == 5 || opt2.value == 13 || opt2.value == 14 || opt2.value == 15 || opt2.value == 16 || opt2.value == 17 || opt2.value == 18){
                        jAlert("No puede elegir dos Laminados o Plastificados al mismo tiempo, elimino uno.","Error de Acabado");
                    }
                }
            }
        }
    }
}
.

Il problema è:

<option selected="" value="-1">Sin Acabados</option>
.

Questa è l'opzione predefinita e voglio rimuoverlo quando seleziò l'altra opzione. Ma non so come farlo, senza rimuovere le altre convalida.

Non riesco a ottenere l'ultima opzione selezionata dall'elenco di $ ("# Enmarcado"). SelectedOptions [] Poiché una selezione multipla riordina sempre gli elementi selezionati con $ ("# enmarcado"). Opzioni [] Ordina. < / P >.

Grazie per il tuo aiuto!

Edit3:

Ho appena trovato un po 'di codice che mi dà il "valore opzionale selezionato":

$("#Enmarcado").chosen().change(function() {
    alert(+$(this).val());
});
.

Ma mi manda Nan quando seleziono più opzioni. Qualcuno potrebbe aiutare a inserirlo nella mia funzione di convalida?

risposta a questo: Elimina il + prima $ (questo) .val () e ti invierà una stringa con i valori selezionati. Ma non è che voglio: ho bisogno di sapere quale opzione ho appena selezionato (o cliccato).

È stato utile?

Soluzione

Ho trovato La soluzione utilizzando Google oggi:

var foo = [];
$('#EnmarcadoChosen :selected').each(function(i, selected){
    foo[i] = $(selected).text(); // you can get the .value() too, and compare it.
});
.

Altri suggerimenti

Potrebbe essere semplice come: $("#Enmarcado option[value='-1']").remove();

Ma se quanto sopra non funziona nel tuo contesto, potresti costruire su Questa risposta per VirtualTroll? (Se è così, anche la sua upvota.) Nel tuo caso, potrebbe sembrare:

for (i=0; i<obj.length; i++) {
   if (obj.options[i].value=='-1') {
     obj.remove(i);
   }
}
.

e nota alcuni approcci più delicati, che potrebbero rendere più facile disattivare il default, in seguito:
1: $("#Enmarcado option[value='-1']").hide();
2: $("#Enmarcado option[value='-1']").attr('disabled','disabled');



Aggiornamento:

Dai nuovi commenti qui sotto, ora è chiaro che non stai cercando di "cancellare" o "Rimuovi" l'opzione - stai solo cercando di Cancella o "deselezionare", La selezione dell'opzione. Anche se non ho conosci una risposta a questo, penso che io trovato risposte a questo. (Ancora una volta, se queste informazioni funzionano per te, ti preghiamo di svegliare anche le loro risposte.)

(1) Nota La soluzione di Sudhir Kesharwani qui . Penso che il suo codice cancella tutte le selezioni ... Quindi, tentando una variazione del suo codice, questa versione della stenografia funziona?:

$("#Enmarcado option[value='-1']").removeAttr("selected");
$("#Enmarcado").trigger("chosen:updated");
.

E (2), potresti trovare utile la documentazione. In Joseph La risposta di Silber qui < / A>, si riferisce a La documentazione qui , dicendo "(trova la sezione intitolata Aggiornamento scelto dinamicamente ). " Spiega che devi innescare chosen:updated dopo ogni modifica di selezione.

Spero che aiuta ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top