当选择标记具有禁用属性时,是否可以在选择标记上触发事件?

问题描述 投票:0回答:1

我禁用了以[[test结尾的id的页面中的所有选择(这里一切都很好),我想做的是在禁用选择时显示title鼠标悬停在它们上面。

我的问题是disabled属性似乎阻止了每个事件的执行(我也尝试使用click而不是mouseover,但结果没有改变)。实际上,我尝试注释hide_children_option();并且该功能起作用。

所以主要问题是:我可以禁用选择,但同时触发事件(或至少使我认为是真实的)吗?

代码段下方:

function hide_children_option() { $("[id$=_test]").attr("disabled", "disabled"); } $(document).ready(function() { hide_children_option(); $("[id$=_test]").mouseover(function() { console.log("Hey you!"); var attr = $(this).attr("disabled"); if (typeof attr !== typeof undefined && attr !== false) { console.log("This is disabled"); } }); });
<head>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
</head>
	Official 1
    <select id="obj1_official">
      <option value="0">0</option>
      <option value="1">1</option>
    </select>
    <br>
    Test 1
    <select id="obj1_test">
      <option value="0">0</option>
      <option value="1">1</option>
    </select>
    <br>
    Official 2
    <select id="obj2_official">
      <option value="0">0</option>
      <option value="1">1</option>
    </select>
    <br>
    Test 2
    <select id="obj2_test">
      <option value="0">0</option>
      <option value="1">1</option>
    </select>
    <br>
javascript jquery html html-select eventtrigger
1个回答
2
投票
无法将鼠标事件添加到禁用的输入。但是,我可以想到有两种解决方案可以使用。

    最简单的方法是在选择项上添加title=""属性,并显示工具提示
  1. 如果您希望使用自己的逻辑,则可以围绕select创建事件包装器,并将事件附加到该包装器。 (请记住,您需要调整此父级的样式以使其内联,并且需要禁用禁用的select的指针事件)
  • 示例:

    function hide_children_option() { $("[id$=_test]").attr("disabled", "disabled"); } $(document).ready(function() { hide_children_option(); $(".test-wrapper").mouseover(function() { console.log('hey!'); }); });
    <head>
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    </head>
    	Official 1
        <select id="obj1_official">
          <option value="0">0</option>
          <option value="1">1</option>
        </select>
        <br>
        Test 1
        <select id="obj1_test" title="Some text you want to show">
          <option value="0">0</option>
          <option value="1">1</option>
        </select>
        <br>
        Official 2
        <select id="obj2_official">
          <option value="0">0</option>
          <option value="1">1</option>
        </select>
        <br>
        Test 2
        <div class="test-wrapper" style="display:inline;">
          <select id="obj2_test" style="pointer-events:none;">
            <option value="0">0</option>
            <option value="1">1</option>
          </select>
        </div>
        <br>
  • © www.soinside.com 2019 - 2024. All rights reserved.