如何以编程方式打开选择

时间:2014-05-12 12:29:37

标签: angularjs select triggers

有没有人知道是否可以在angularjs中以编程方式打开选择。我试过了

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

没有任何作用。

我也试过

$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);

}

以上设定的焦点,但不要打开选择。

有可能吗?

6 个答案:

答案 0 :(得分:0)

尝试将其悬停:

JS:

$(document).ready(function(){
$("#selectId").hover(function(){
   $(this)[0].size=$(this).find("option").length;
});
$("#selectId").click(function(){
   $(this)[0].size=0;
});
});

HTML:

<select id="selectId">
  <option>Volvo</option>
  <option >Saab</option>
  <option>Mercedes</option>
  <option>Audi</option>
</select>

答案 1 :(得分:0)

您可以通过设置选择的大小并使用 position:absolute 让它浮动来实现这一点。

<div  style="position:relative">.<select style="position:absolute;top:-8px;left:-20px" onClick="onAssign(this)">   
    <option>a</option>
    <option>b</option>
    <option>c</option>
</select></div>

function openMySelect(){
  document.querySelector(‘#mySelect’),size=YOUR_OPTIONS.length;
}

function onAssign(data,select){
  select.size=1
  // your logic
}

答案 2 :(得分:0)

我想我找到了一个解决方案,至少对我有用:

首先尝试获取 ng-select 的箭头,然后强制执行 mousedown 事件

let arrowSpan = document.querySelector('.ng-arrow-wrapper');
arrowSpan.dispatchEvent(new CustomEvent('mousedown', { bubbles: true }))

Select span arrow

答案 3 :(得分:-1)

试试这个

&#13;
&#13;
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");
&#13;
&#13;
&#13;

或在此处阅读更多Triggering built-in events

答案 4 :(得分:-1)

haste提供的答案不起作用:

var cb = element[0].getElementsByClassName('some-selector')[0];
var event = new MouseEvent('mousedown', {
    'view': window,
    'bubbles': true,
    'cancelable': true
});                        
cb.dispatchEvent(event);

我使用更简单的方法:

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

答案 5 :(得分:-8)

我有同样的问题,最后我创建了自己的指令:

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);
                });
            }
        };
    });

使用:

<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>

将指令添加到任何传递要打开的select(elemento)id的标记。

如果要在其他上下文中使用,可以在指令中看到非常基本的javscript代码;

希望它有所帮助; D