【问题标题】:Jquery cannot invoke a click, but can manually do it with a mouseJquery不能调用点击,但可以用鼠标手动完成
【发布时间】:2016-06-22 13:51:50
【问题描述】:

我正在使用 D3 创建一个地图,其中包含一些散落在各处的文本对象。每个文本对象都有一个附加的 ID 属性和一些用于其值的单词。下面是一些示例代码来了解我正在创建的内容:

g.selectAll("text")
    .data(data).enter()
    .append("text")
    .attr("id", function(d,i){return "cows_name";})
    .text( function(d) { return "cows"; })
    .on("click", function(d) {
        alert("### we are in here" with $(this).attr("id"));
    })

当我在浏览器 (Firefox 45) 中手动单击“奶牛”文本对象时,会调用警报事件,并且我可以得出结论,id 属性返回“奶牛名称”。

但是,当我尝试在 Selenium 或 Scratchpad 中调用此 JQuery 代码时:

var toClick = $("#cows_name")
toClick.click();

什么都没有发生。在了解“单击”使用上述脚本生成的 D3 对象的正确方法是什么时,我是否遗漏了什么?

【问题讨论】:

  • 你是selectAll("text"),难道不是on element 的id 为cows_name,因此它是模棱两可的?
  • click() 是一种存在于 HTML 元素而非 SVG 元素上的方法。
  • 您能否在警报位置控制台记录 $(this) 以查看它正在返回 cow_name 元素
  • @Paul 您对可能的歧义是正确的,但是,我的数据收集只有 1 个条目。抱歉,我应该更具体一点。
  • @RobertLongson 在 SVG 元素上执行此操作的正确方法是什么?

标签: javascript jquery d3.js


【解决方案1】:

首先,让我们将您的 toClick 更改为:

var toClick = $("#cow_name")[0];

这会选择实际的 DOM 元素。更改您的toClick 后,我发现这个很酷的功能可以“模拟”点击事件:

function fakeClick(target) {
    var event = new Event('click');
    target.dispatchEvent(event);
};

然后,你称之为:

fakeClick(toClick);

这里是小提琴,使用 SVG 元素:https://jsfiddle.net/ap1m1L0q/4/

【讨论】:

    【解决方案2】:

    你可以使用jQuery.trigger()

    var toClick = $("#cows_name");
    toClick.trigger( "click" );
    

    【讨论】:

    • .trigger 似乎没有做任何类似的点击。当我手动单击它时,我 console.log() 元素,但是它确实有触发方法。
    • 查看问题下方更新的 cmets,因为该对象的选择器似乎为空。不知道这是否有任何问题
    猜你喜欢
    • 1970-01-01
    • 2014-11-21
    • 2018-06-24
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 2021-05-23
    • 2014-08-12
    相关资源
    最近更新 更多