jQuery trigger("click")无效

5

有人能解释一下粘贴的代码有什么问题吗?它可以在悬停时显示警报,但不像我期望的那样执行单击事件,并且无法在<a>标签或<select>标签上工作。我的目的是通过触发点击事件来扩展select元素的悬停

<!DOCTYPE html>
<html>

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

<body>
    <a id="linkElement" href="www.google.co.uk">click</a>

    <select name="cars" id="selectElemet">
      <option value="volvo">Volvo</option>
      <option value="saab">Saab</option>
      <option value="fiat">Fiat</option>
      <option value="audi">Audi</option>
    </select>


    <script>
        $(document).ready(function () {
            $("#selectElement").mouseover(function () {
                $("#selectElement").trigger("click");
            });

            $("#linkElement").mouseover(function () {
                alert('here');
                $("#linkElement").trigger("click");
            });
        });
    </script>
</body>

</html>

你的点击事件在哪里? - guradio
使用$("#linkElement").click()代替$("#linkElement").trigger("click")。 - Sudhakar
尝试过 $("#linkElement").click(); 和 $("#selectElement").get(0).click(); 但仍然无效。 - Frankenstine Joe
2
很抱歉,程序上无法扩展选择元素。请参见https://dev59.com/cHRC5IYBdhLWcg3wCMnX或https://dev59.com/SHjZa4cB1Zd3GeqPe4Jz。 - Arun P Johny
您想在悬停时显示选择选项列表吗?我的理解正确吗? - Jagadeesh
显示剩余4条评论
5个回答

3

.trigger("click") 不会真正地触发元素的点击事件,它只会触发与该元素绑定的点击事件处理程序。因为您没有附加任何处理程序,所以不会触发任何事件。

您可以使用本机 .click()

$("#selectElement").get(0).click(); //get(0) returns reference to DOM element

我认为调用本地的点击事件并不能解决OP的问题。 - Arun P Johny
@ArunPJohny, 同意,只是提供一下为什么trigger() 不起作用的原因。 - Satpal

2

你的ID属性中有一个拼写错误。将“selectElemet”替换为“selectElement”。希望这可以帮到你。


谢谢,我已经修复了,但是还是无法正常工作。 - Frankenstine Joe
你可以尝试这个替代方案:$("#linkElement").mouseover(function () { alert('here'); $(this).trigger("click"); }); - JefferinJoseph
这里的“alert”正在干扰您的触发器函数。请将其删除并尝试,这样会起作用。 - JefferinJoseph
为了测试,您可以为该元素编写一个单击处理程序。$("#linkElement").on('click',function(){ alert('单击后'); }); - JefferinJoseph

2

trigger('click') 只有在您使用元素设置了'click'事件时才会发生,而不是物理上的'click'。例如,如果没有附加'click',即使附加了'tag'标签,trigger('click')也不会触发。


1

Try this,

$('#selectElement').on('change', function() {
});

1

将点击事件处理程序添加到元素中。只有这样才能起作用。

检查下面的片段。

尝试将鼠标放在链接上,它将触发点击事件处理程序。

$(document).ready(function() {
  $("#linkElement").mouseover(function() {
    $("#linkElement").trigger("click");
  });
  $("#linkElement").click(function(){
    window.location.href=$("#linkElement").attr("href");
  });
});
<!DOCTYPE html>
<html>

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

<body>
  <a id="linkElement" href="www.google.co.uk">click</a>

  <select name="cars" id="selectElemet">
  <option value="volvo">Volvo</option>
  <option value="saab">Saab</option>
  <option value="fiat">Fiat</option>
  <option value="audi">Audi</option>
</select>
</body>

</html>


1
谢谢您的回答。这个方法是通过重定向页面来实现的,使用代码 window.location.href = $("#linkElement").attr("href"); 来处理 <a> 标签。但我需要打开 <select> 元素,所以不确定这个方法是否适用于我。 - Frankenstine Joe
@FrankenstineJoe,为此,我建议您使用这个问题https://dev59.com/Z3I-5IYBdhLWcg3wBjnk - Sagar V

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接