简体   繁体   English

尝试实现指针事件:在 JavaScript 中没有

[英]Trying to implement pointer-events: none in JavaScript

I have a select dropdown to which I am trying to remove the down arrow using a dummy mask element.我有一个选择下拉列表,我试图使用虚拟掩码元素删除向下箭头。 But when I click that mask element, the select dropdown is not triggering.但是当我单击该掩码元素时,不会触发选择下拉列表。

Check this Fiddle检查这个小提琴

If I give pointer-events: none to .slct-drpdwn , everything works fine but sadly this isn't supported in IE9.如果我给pointer-events: none.slct-drpdwn ,一切正常,但遗憾的是 IE9 不支持。 So, I thought to implement css pointer-events: none like behavior using JavaScript.所以,我想实现 css pointer-events: none like 使用 JavaScript 的行为。

Here is the JavaScript code which isn't doing anything:这是没有做任何事情的 JavaScript 代码:

var select = document.querySelector('.slct-drpdwn');
select.onclick = function (e) {
    var e = e || window.event;
    console.log("in");
    if (!e.preventDefault) { //IE quirks
        e.returnValue = false;
        e.cancelBubble = true;
    }
    e.preventDefault();
    e.stopPropagation();
}

Try this if you don't want to use overflow:hidden;如果你不想使用overflow:hidden;试试这个overflow:hidden; : http://jsfiddle.net/MadalinaTn/1c7hqddy/1/ http : //jsfiddle.net/MadalinaTn/1c7hqddy/1/

    .slct {
    position:relative;
    display:block;
    border:solid black 1px;
    float:left;
    overflow: hidden;
}
div select {
    z-index:1;
    background: transparent;
    border:0;
    width: 200px;
    appearance:none;
    -moz-appearance:none; /* Firefox */
    -webkit-appearance:none; /* Safari and Chrome */
}
.slct .slct-drpdwn {
    display:block;
    position:absolute;
    right:0;
    top:0;
    height:1em;
    width:1em;
    margin:2px;
    background:red;
    z-index: -1;
}

Try with jQuery:尝试使用 jQuery:

http://jsfiddle.net/MadalinaTn/5cbobco5/3/ http://jsfiddle.net/MadalinaTn/5cbobco5/3/

$('.slct-drpdwn').click(function() {
    var e = document.createEvent('MouseEvents');
    e.initMouseEvent('mousedown');
    $('select')[0].dispatchEvent(e);
});

IE9 recognizes pointer events: none, but only for SVG elements. IE9 识别指针事件:无,但仅适用于 SVG 元素。 Try this:尝试这个:

 <div class="slct">
            <select>
                <option>Foobar</option>
                <option>Bar</option>
                <option>Foo</option>
                <option>Baz</option>
            </select>
            <svg class="slct-drpdwn" id="slct-drpdwn"></svg>
        </div>
        #slct-drpdwn{
                pointer-events: none;
        }

http://jsfiddle.net/MadalinaTn/u8oea7nt/2/ http://jsfiddle.net/MadalinaTn/u8oea7nt/2/

You can resolve this in css, without js:您可以在 css 中解决此问题,无需 js:

    .slct {
    position:relative;
    display:block;
    border:solid black 1px;
    float:left;
    overflow: hidden;
}
div select {
    z-index:1;
    width:125%;
    background: transparent;
    border:0;
}
.slct .slct-drpdwn {
    display:block;
    position:absolute;
    right:0;
    top:0;
    height:1em;
    width:1em;
    margin:2px;
    background:red;
    z-index: -1;
}

http://jsfiddle.net/MadalinaTn/fj53g8k9/1/ http://jsfiddle.net/MadalinaTn/fj53g8k9/1/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM