2012-11-05 27 views
22

Ich benutze diesen Code für Simulieren click auf select Element:Simulieren mit jQuery auf select-Element klicken

$(function(){ 
    $("#click").click(function(){ 
     $("#ts").click(); 
     //$("#ts").trigger("click"); 
    }); 
}); 

und HTML-Code ist:

<select id="ts"> 
    <option value="1">1</option> 
    <option value="2">Lorem ipsum dolor s.</option> 
    <option value="3">3</option> 
</select> 

<input type="button" id="click" value="Click"/> 

Ich teste click und trigger aber beide nicht funktionieren.

Danke für jede Hilfe.

+0

und was wollen Sie passieren? – Elen

+0

Ein Klick-Ereignis löst NICHT aus, dass SELECT geöffnet wird, wenn Sie das möchten. –

+0

@Elen Ich möchte öffnen Dropdown wählen – Nulled

Antwort

2

Das ist so nah wie Sie bekommen denke ich:

$(function(){ 
    $("#click").on('click', function(){ 
     var s = $("#ts").attr('size')==1?5:1 
     $("#ts").attr('size', s); 
    }); 
    $("#ts option").on({ 
     click: function() { 
      $("#ts").attr('size', 1); 
     }, 
     mouseenter: function() { 
      $(this).css({background: '#498BFC', color: '#fff'}); 
     }, 
     mouseleave: function() { 
      $(this).css({background: '#fff', color: '#000'}); 
     } 
    }); 
}); 

FIDDLE

14

Dies ist die beste Cross-Browser-Methode, die ich denke, Sie bekommen können. Getestet auf Safari, Firefox, Chrome und IE. Für Chrome ist Oscar Jaras Antwort der richtige Weg. (Update: 10-13-2016)

$(function() { 
    $("#click").on('click', function() { 
     var $target = $("#ts"); 
     var $clone = $target.clone().removeAttr('id'); 
     $clone.val($target.val()).css({ 
      overflow: "auto", 
      position: 'absolute', 
      'z-index': 999, 
      left: $target.offset().left, 
      top: $target.offset().top + $target.outerHeight(), 
      width: $target.outerWidth() 
     }).attr('size', $clone.find('option').length > 10 ? 10 : $clone.find('option').length).change(function() { 
      $target.val($clone.val()); 
     }).on('click blur keypress',function(e) { 
     if(e.type !== "keypress" || e.which === 13) 
      $(this).remove(); 
     }); 
     $('body').append($clone); 
     $clone.focus(); 
    }); 
}); 

Siehe jsFiddle demo

+0

Ich benutzte diesen Code heute Abend, hatte aber ein paar Schwierigkeiten: die linke und obere Zeile mussten beide für die Ränder versetzt werden (mit box-sizing: border-box wenn es darauf ankommt). Der schwierigere Teil war, dass ich meine select css auf die Höhe gesetzt hatte: 20px, was die reguläre Auswahl richtig überschreibt für das Dropdown. Mit diesem Code wurde nicht überschrieben. Das Umschalten meines CSS auf Min-Höhe: 20px war ausreichend für mein Problem. Eine Stunde Haare ziehen verdient, geteilt zu werden :-) – Stephen

+0

es versteht nicht, in FF eingeben. – Fanky

+1

@Fanky Aktualisierter Code und jsFiddle.Hast du es gemeint? –

-3

kleines Update (mit toggle) für Oscar Jara Variante
http://jsfiddle.net/mike_s/y5GhB/

+4

Beachten Sie, dass [Link-Only-Antworten] (http://meta.stackoverflow.com/tags/link-only-answers/info) entmutigt werden, SO-Antworten sollten der Endpunkt einer sein Suche nach einer Lösung (im Gegensatz zu einem weiteren Zwischenstopp von Referenzen, die im Laufe der Zeit abgestanden werden). Bitte beachten Sie, dass Sie hier eine eigenständige Zusammenfassung hinzufügen und den Link als Referenz beibehalten. – kleopatra

+0

Funktioniert nicht in FireFox. – Justin

2

ich das ausgewählte Attribut Einstellung endete auf die Option selbst. Dann löst die Änderung sogar auf dem Select-Element aus.

+0

danke das war sehr nützlich! $ ("# x"). val ('09 .5 '); $ ("# x"). Trigger ("change"); – waza123

0

Ich habe ein komplexes select Element, gespeist von der Antwort in einem vorherigen select Element gegeben. Optionen werden von AJAX gespeist, ausgelöst durch onchange Ereignisse.

Für meine Bedürfnisse, um Antworten mit einem "versteckten magischen Ereignis", das Benutzerverhalten simuliert (in einer intensiven Testweise), verwende ich den folgenden jQuery-Code in "mein magisches Ereignis". Er wählt die Option durch seinen Index:

// Quick feed of my Car Form  
document.getElementById('carbrand').selectedIndex = 30; // "PORSCHE" 
document.getElementById('carbrand').onchange(); 

var timeoutID = window.setTimeout(function() { 

    document.getElementById('model').selectedIndex = 1; // "911" 
    document.getElementById('model').onchange(); 

    var timeoutID = window.setTimeout(function() { 
     document.getElementById('energy').selectedIndex = 1; // "SUPER" 
     document.getElementById('energy').onchange(); 
    } , 200); 

} , 200); 

Merci à https://stackoverflow.com/users/1324/paul-roub pour les Korrekturen ;-)