2014-05-12 23 views
9

Qualcuno sa se è possibile aprire una selezione a livello di programmazione in angularjs. Ive provatoCome aprire selezionare a livello di programmazione

angular.element(el).trigger('focus'); 
angular.element(el).trigger('click'); 
angular.element(el).trigger('mousedown'); 

Niente funziona.

Ho anche provato

$scope.doSomething = function(){ 
    setTimeout(function() { 
     var el = document.getElementById('test'); 
     var e = document.createEvent("MouseEvents"); 
     e.initMouseEvent("mousedown", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null); 
     worked = el.dispatchEvent(e); 
    }, 0); 

} 

Il set di sopra di messa a fuoco ma non aprire il prescelto.

È possibile?

+2

http://stackoverflow.com/questions/249192/how-can-you-programmatically-tell-an-html-select-to-drop-down- per esempio-dovuto –

+0

grazie, l'ho provato ma non funziona in angularjs. Ho aggiornato la mia domanda – user727507

+0

Si prega di fare un violino –

risposta

-6

Ho avuto lo stesso problema e alla fine sto creare la mia direttiva:

angular.module('openselect', []) 
    .directive('openselect', function() { 
     var showDropdown = function (element) { 
      var event; 
      event = document.createEvent('MouseEvents'); 
      event.initMouseEvent('mousedown', true, true, window); 
      element.dispatchEvent(event); 
     }; 
     return { 
      restrict: 'A', 
      scope: { 
       'elemento': '@' 
      }, 
      link: function (scope, elem, attrs, ctrl) { 
       elem.bind('click', function() { 
        var elemento = document.getElementById(scope.elemento); 
        showDropdown(elemento); 
       }); 
      } 
     }; 
    }); 

Per utilizzare:

<div style="position:relative"> 
<span ng-show="submittedForm.contry.$error.required && co_form.contry.$error.required" class="label label-danger">Indicanos tu país</span> 
<select name="country" class="form-control input-md" ng-model="formCheckout.country" id="myCountry" placeholder="España" required> 
    <option value="6" selected="selected">España</option> 
    <option value="1">Alemania</option> 
    <option value="15">Portugal</option> 
</select> 
<span class="glyphicon glyphicon-chevron-down" style="position: absolute; right: 10px; color: #A6A6A6; top: 18px;" openselect elemento="myCountry"></span> 

direttiva aggiunge a qualsiasi tag passando id di select (Elemento) che vuoi aprire.

È possibile visualizzare il codice javscript all'interno della direttiva se si desidera utilizzare in un altro contesto;

Speranza che aiuta; D

+5

è disonorevole copiare una soluzione geniale di qualcun altro, pappagallo come il tuo e non dare loro alcun credito. – r3wt

+0

Questa è una vergogna completa. –

0

provare questo

function openSelect(selectId) { 
 
    var event = new MouseEvent('mousedown', { 
 
     'view': window, 
 
     'bubbles': true, 
 
     'cancelable': true 
 
    }); 
 
    var cb = document.getElementById(selectId); 
 
    cb.size=4; 
 
    cb.dispatchEvent(event); 
 
} 
 
openSelect("testId");

o leggere di più qui Triggering built-in events

+0

Non funziona per me su Firefox, solo su Chrome. Qual'è il problema? –

+0

Caro Karel, lo collaudo su Firefox, funziona. Può essere un errore javascript? – haste

0

La risposta fornita da haste non funziona:

Io uso più semplice metodo:

var cb = element[0].getElementsByClassName('some-selector')[0]; 
angular.element(cb).triggerHandler('click'); 
Problemi correlati