2013-03-21 12 views
10

Ho un menu di selezione che attiva una richiesta AJAX dopo aver fatto clic su una delle opzioni. Devo attivare un evento click sull'opzione pertinente da un collegamento. Quindi devo codice simile a quello qui sotto, e anche se cambia il valore della select, non simula un clic:jQuery simula l'evento click sull'opzione select

$('#click').click(function(){ 
    var value = $(this).attr("rel"); 
    $('#select').val(value); 
    return false; 
}); 

<select id="select" name="select"> 
    <option>Select...</option> 
    <option value="1">Option 1</option> 
    <option value="2">Option 2</option> 
</select> 

<a href="#" rel="1" id="click">Click for option 1</a> 

Qualsiasi aiuto sarebbe molto apprezzato.

risposta

3
$('#click').click(function(){ 
    var value = $(this).attr("rel"); 
    $('#select') 
     .val(value) 
     .trigger('click'); 
    return false; 
}); 

La semplice impostazione del valore di <select> non attiva l'evento click di quell'elemento; deve essere chiamato direttamente.

+0

Grazie per la risposta. Questo ha senso, ma ho implementato il tuo esempio sopra e non sta ancora attivando la chiamata AJAX che viene effettuata quando un'opzione è stata selezionata. Qualche idea? –

+0

Non sono un sensitivo, devi pubblicare il tuo codice che chiama la tua funzione Ajax. –

+5

Invece di attivare un evento click, attivare un evento change. –

-3

Fa parte del core WooCommerce, quindi non posso pubblicarlo tutto. Ma qui è un frammento, anche se io non sono troppo sicuro se vi dirà tanto ...

.on('change', '.variations select', function(event) { 

    $variation_form = $(this).closest('form.variations_form'); 
    $variation_form.find('input[name=variation_id]').val('').change(); 

    $variation_form 
     .trigger('woocommerce_variation_select_change') 
     .trigger('check_variations', [ '', false ]); 

    $(this).blur(); 

    if($().uniform && $.isFunction($.uniform.update)) { 
     $.uniform.update(); 
    } 

}) 
9

Attivazione di un evento click sull'opzione non funzionerà. Ecco un frammento che fa:

$('#click').on('click', function(){ 
     var value = $(this).attr('rel'); //get the value 
     value++; //increment value for the nth-child selector to work 

     $('#select') 
      .find('option:nth-child(' + value + ')') 
      .prop('selected',true) 
      .trigger('change'); //trigger a change instead of click 

     return false; 
    }); 

Ho installato un violino here che mostra lo stesso. Questo dovrebbe funzionare.

Invece di utilizzare un clic è possibile attivare l'evento di modifica e ottenere lo stesso effetto.

+0

IMO la tua risposta è migliore in quanto molti hanno una funzione di onchange :) –