2015-06-01 77 views
1

我正在使用angularstrap的bs-select做下拉列表选择。我想以编程方式使用JavaScript触发下拉列表按钮。 这里是plunker:如何以编程方式触发角度带bs-选择

Plunker Link

我想用按钮来触发下拉列表中。我已经尝试了三种方法:

  1. angular.element(document.querySelector("#test1")).triggerHandler('click');

它的工作原理与ng-click的元素。但并没有在bs-select

工作
  • document.getElementById("test1").click();
  • 仍然为triggerHandler('click')

    没有工作
  • angular.element(document.querySelector("#test1")).triggerHandler('click'); $scope.$apply()
  • 我认为这将是问题的范围需要再次消化,但事实证明,情况并非如此。

    及其在角带的BS-选择代码如下:

    $select.$onMouseDown = function(evt) { 
        // Prevent blur on mousedown on .dropdown-menu 
        evt.preventDefault(); 
        evt.stopPropagation(); 
        // Emulate click for mobile devices 
        if(isTouch) { 
         var targetEl = angular.element(evt.target); 
         targetEl.triggerHandler('click'); 
        } 
    }; 
    

    当它是mousdown它触发该按钮的点击。那我该怎么办呢?

    感谢您的回复。

    +1

    如果您使用的是jQuery,那么只需使用'$(targetEl).trigger('click')' –

    +0

    @ pankajparkar角度带不是我的代码。我正在使用这个角度带库进行一些开发。由于我使用角度,所以我没有使用jQuery。 – Gabriel

    +0

    @Gabriel是否愿意使用角度带下拉? – scniro

    回答

    -1

    我终于弄清楚如何处理这个问题。这里是plunker:

    plunker link

    triggerHandler('click') 
    

    应该

    triggerHandler('mousedown') 
    

    如角带它使用onmousedown事件的事件处理程序,所以在触发器处理程序,我不应该用triggerHandler ( '点击')。相反,我应该使用triggerHandler('mousedown')来触发事件。现在它起作用了。

    +0

    我不是特别兴奋的不接受。这个解决方案并不理想。当api为此特定场景提供手动配置时,您正在黑客点击事件。你现在也失去了隐藏你的下拉菜单的能力,你可能会利用更多的黑客手段作为解决方法。绑定到一个变量是理想的 – scniro

    +0

    @salniro所以我正在实现应用程序的自动演练,我将以编程方式单击下拉列表中的项目。并且该应用程序已经完成了bs-select,将其更改为单个漫游功能的下拉菜单很痛苦。所以我希望它能帮助有同样问题的其他人。 – Gabriel

    1

    我遇到过与AngularStrap类似的问题。在这些指令中有一个配置选项trigger,可选值为manual。这是我们需要利用的配置选项,以实现我们想要的。

    这个问题,是没有文件的任何地方使用这个。由于在你提到的评论中你可以使用AngularStrap Dropdowns,经过很多努力,我找到了解决这个问题的方法。观察该实施下拉的...

    <button ng-model="expression" intellisense bs-dropdown="values" bs-show="drop">dropdown</button> 
    

    app.config(function($dropdownProvider) { 
        angular.extend($dropdownProvider.defaults, { 
         trigger: 'manual' 
        }); 
    }); 
    

    你会注意到的bs-show的元素有关的属性。这是根据truefalse值触发滴定的绑定。让我们来配合这另一个元素ng-click事件......

    <button ng-click="fireDropDown()">Manually Drop</button> 
    

    $scope.fireDropDown = function() { 
        $scope.drop = $scope.drop ? false : true; 
    } 
    

    我试图做同样的bs-select,但(这并不奇怪),它不工作。这里有一些额外的资源可以帮助你。

    Plunker Example - 触发下拉手动

    Display AngularStrap Dropdown Manually - How? - 所以我提出的问题,而打我的头在这个问题上

    feat(tips,pickers): add bsShow visibility attr (fixes #723) - 修正了应该有固定的这个。不确定为什么修复不跨越所有指令,包括bs-select

    +0

    感谢您的解决方案!真的很感激它! – Gabriel

    相关问题