触发在IE8中不起作用的元素上的单击事件

时间:2015-04-09 09:21:13

标签: javascript jquery html angularjs angular-file-upload

我正在创建一个有角度的应用程序,但我找到了一个需要使用jQuery的实例。我需要单击一个按钮,在另一个隐藏按钮上引发单击事件。我知道这看起来很奇怪,但我需要这个功能,因为我使用的角度模块ng-file-upload不适用于样式图标。

我的解决方案是创建两个按钮,一个隐藏,一个透明。然后我将样式图标放在透明按钮上,并隐藏另一个按钮。然后我使用jQuery导致在单击第一个按钮时单击第二个按钮。这在现代的firefox / chrome中运行良好,但在IE8中完全没有。

<button id="firstClick" class="fa fa-camera-retro"></button>
<button ng-hide="true" id="secondClick" ng-file-select ng-model="files">Upload</button>
$(document).on('click', '#firstClick', function() {
    $('#secondClick').trigger('click');
});

我目前正在使用jQuery版本1.10.2。任何帮助这种或替代方法来实现这一点将不胜感激。提前致谢!

更新: 我认为问题可能与angular-file-select有关,因为secondClick现在正在触发。但是,angular-file-select不是。此外,我将secondClick设置为可见,当我直接点击它时,它会触发ng-file-select。

3 个答案:

答案 0 :(得分:2)

正如您未提及应用的角度版本正在使用。但是,如果您使用angular 1.3.x,那么您必须知道它不再支持 IE8 浏览器。

docs for IE guide.

有一张纸条:

  

注意: AngularJS 1.3已经放弃了对IE8的支持。在我们的博客上阅读更多相关信息。 AngularJS 1.2将继续支持IE8,但核心团队不打算花时间解决IE8或更早版本的特定问题。


根据你的评论:

网站的每个其他部分都是100%角度,并且运行完美。正是在这种情况下,我无法想到一个有角度的解决方案。

然后我想建议你,angular中有一个精简版的jQu​​ery,名为jqLite。您可以使用它,例如:

angular.element('#firstClick').on('click', function() {
    angular.element('#secondClick').trigger('click');
});

Docs for angular.element

答案 1 :(得分:0)

编辑:您可以使用以下网址转发具有良好浏览器支持的元素的鼠标事件:http://www.vinylfox.com/forwarding-mouse-events-through-layers/

如果您有幸不必使用旧浏览器,那么您可以放弃指针事件CSS属性。

#firstClick {
    pointer-events: none;
    }

答案 2 :(得分:0)

将jquery版本更改为更低版本。通过查看this线程我认为版本1.10.2不支持ie8。我也试过jsfiddle并在ie8中测试有问题。当我改变版本时,它正在工作Fiddle

$('#secondClick').click();