单击禁用的 <select> 选项框时如何触发警报消息?

How do I fire alert message when clicking on disabled <select> option box?

我想在单击禁用的 <select> 选项框时触发警报。当 <select> 框未被禁用时,它不应触发,无论选项 select 中的选项是否被禁用。

它应该只在整个 <select> 框被禁用时触发,无论单个选项本身是禁用还是启用。单独的单个选项不应影响警报。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<script type='text/javascript'>
$(document).ready(function(){
    $('#optDir').click(function(){
        alert("The Box is dissabled... ``Text Direction`` can only be chosen, when choosing ``Auto Detect`` languadge");
    });
});
</script>

<script type="text/javascript">
$(document).ready(function () {
        $("#opt").change(function () {
            if ($(this).val() == "auto") {
                $("#optDir").prop('disabled', false);
            } else {
                $("#optDir").prop('disabled', true);
            }
        })
    });
</script>

<script type='text/javascript'>
function setRtL(obj) {
    var textbox = document.getElementById("SeekBox");
    textbox.style.direction = ["ar","RightToLeft"].indexOf(obj.value) >=0 ? "rtl" : "ltr";
}
</script>

<div id="Layer1" style="position:relative; text-align:center; overflow:hidden; left:0px; top:0px; width:100%; height:auto;z-index:1;">

<select name="LangF" class="OBSMatch" id="opt" onchange="setRtL(this)">
  <option value="auto">Auto Detect</option>
  <option value="ar">Arabic</option>
  <option selected value="en">English</option>
  <option value="fr">French</option>
  <option value="de">German</option>
  <option value="ru">Russian</option>
  <option value="es">Spanish</option>
</select>

<select disabled name="LangF" class="dis-element" id="optDir" onchange="setRtL(this)" title="``Text Direction`` can only be chosen, when choosing ``Auto Detect`` languadge">
  <option selected value="" disabled>Only with: Auto Detect</option>
  <option value="">Text: Left To Right</option>
  <option value="RightToLeft">Text: Right To Left</option>
</select>

</div>

注意:所有模型代码都经过简化,整个工作量更大。

禁用的元素不会触发任何鼠标事件。因此,即使来自禁用的 select 框,您也无法捕获点击。您可以在它周围保留一个包装器 div,然后从那里放置 onclick 事件,您可以使用 .siblings() 获取 select 元素并检查它是否已禁用 属性。 当您启用 select 时,您将必须删除包装器 div。为此,您可以 hide() 包装器 div 并在需要时再次显示它。

类似这样的方法似乎有效:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<script type='text/javascript'>

function checkDisableSelect(obj){
   var select = $(obj).siblings('#optDir').first();
   if($(select).attr('disabled'))
       alert("The Box is dissabled... ``Text Direction`` can only be chosen, when choosing ``Auto Detect`` languadge");
}
</script>

<script type="text/javascript">
$(document).ready(function () {
        $("#opt").change(function () {
            if ($(this).val() == "auto") {
                $("#optDir").prop('disabled', false);
                $('#selectWrapper').hide();
            } else {
                $("#optDir").prop('disabled', true);
                $('#selectWrapper').show();
            }
        })
    });
</script>

<script type='text/javascript'>
function setRtL(obj) {
    var textbox = document.getElementById("SeekBox");
    textbox.style.direction = ["ar","RightToLeft"].indexOf(obj.value) >=0 ? "rtl" : "ltr";
}
</script>




<select name="LangF" class="OBSMatch" id="opt" onchange="setRtL(this)">
  <option value="auto">Auto Detect</option>
  <option value="ar">Arabic</option>
  <option selected value="en">English</option>
  <option value="fr">French</option>
  <option value="de">German</option>
  <option value="ru">Russian</option>
  <option value="es">Spanish</option>
</select>
<div id="selectContainer" style="position:relative">
<select disabled name="LangF" class="dis-element" id="optDir" onchange="setRtL(this)" title="``Text Direction`` can only be chosen, when choosing ``Auto Detect`` languadge">
  <option selected value="" disabled>Only with: Auto Detect</option>
  <option value="">Text: Left To Right</option>
  <option value="RightToLeft">Text: Right To Left</option>
</select>
<div id="selectWrapper" style="position:absolute; top:0; left:0; bottom:0; right:0;" onclick="checkDisableSelect(this)"></div>
</div>