click() 带有链接

2024-02-07

我有一个页面,其中有一些链接,都是这样的:

<a href="/" class="answer-item" rel="0">10</a>

我想使用click()函数来模拟用户点击其中一个,但它在我的测试中似乎不起作用。

//Evaluate a mathematical expression from another part of the page
var numberAnswer = eval(document.getElementById("question-title").getElementsByTagName("b")[0].innerHTML);

//Builds an array with the links that may match the expression
var choices = document.getElementsByClassName('answer-item');

//Iterates through array to find a match then clicks it
for(var i in choices){
    if(choices[i].innerHTML == numberAnswer){
        choices[i].click();
        break;
    }
}

我确定choices[i]是正确的元素。

Firefox 不执行任何操作,Opera 不执行任何操作,并且 click() 在 Chrome 中不可用(我认为)。

另外,我尝试过使用dispatchEvent()以这种形式:

var evt = document.createEvent('MouseEvents');
evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
choices[i].dispatchEvent(evt);

这显然返回了true在 Firefox 和 Chrome 中,但没有改变任何东西。

最麻烦的部分是仅包含href属性可以很好地配合.click().


EDIT

根据评论区的讨论,这个答案中使用的行为似乎是非标准的,或者至少在用户代理之间不一致。我正在进一步研究这个问题;如果您使用此答案中的信息,请在所有浏览器中仔细检查您的代码,以确保其按预期工作。


EDIT 2

根据OP的评论,有一种“让它发生”的方法在这里可行。它有一些缺点,即您的绑定事件无法调用preventDefault——这个方法不会尊重它。您可以构建某种可能能够处理此问题的事件包装器...无论如何,这是代码和小提琴:

HTML:

<br><br>
<!-- I am totally misusing this API! -->
<a href="http://jsfiddle.net/echo/js/?delay=0&js=The link was followed;" id="progra_link">Some link with an event that uses preventDefault()</a>
<br><br>
<button id="doit_btn">Programmatically click the link</button>

Script:

function do_program_click () {
    var lnk = document.getElementById('progra_link');
    var loc = lnk.href;
    if (!loc)
        return false;            
    // call this to fire events
    lnk.click();

    // then follow the link
    document.location = loc;
    return;
};
function addEvent(element, evnt, funct){
  if (element.attachEvent)
   return element.attachEvent('on'+evnt, funct);
  else
   return element.addEventListener(evnt, funct, false);
}

// bind an event to the link to test force event trigger
addEvent(
    document.getElementById('progra_link'),
    'click',
    function (e) {
        e.preventDefault();
        alert('Testing element click event, default action should have been stopped');
        return false;
    }
);
// bind event to the leeroy button
addEvent(
    document.getElementById('doit_btn'),
    'click',
    do_program_click
);

js小提琴:http://jsfiddle.net/CHMLh/ http://jsfiddle.net/CHMLh/


原答案

您的示例代码不完整。如果我只掌握基础知识,它就可以正常工作:

<script>
   var lnk = document.getElementById('test');
   lnk.click();
</script>
<a id="test" href="/" class="answer-item" rel="0">test link</a>

js小提琴:http://jsfiddle.net/cgejS/ http://jsfiddle.net/cgejS/

我会重新评估您正在处理正确的 dom 元素的假设。

在一个不相关的注释中,这个:

var numberAnswer = eval(document.getElementById("question-title").getElementsByTagName("b")[0].innerHTML);

... 什么?eval是邪恶的——如果您出于任何原因使用过它,请质疑您的方法是否正确。您是否想从字符串中获取整数?看parseInt (docs https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt),适合这项工作的工具:

// this line is still failure-prone...
var ele = document.getElementById("question-title").getElementsByTagName("b")[0];
var numberAnswer = 0;
if (ele)
   numberAnswer = parseInt(ele.innerHTML);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

click() 带有链接 的相关文章

随机推荐

  • Javascript Set() 中的成员数量是否有限制?或者这是V8中的一个错误

    下面是一些简单的 Javascript 代码 它将整数重复添加到 Set 中 var i var limit 1 lt lt 24 var s new Set for i 0 i lt limit 10 i s add i if i gt
  • 关机还是不关机?在ExecutorService(Java8)中

    我试图了解执行程序服务相对于关闭的行为 文档说 除非有 shutdown 调用 否则应用程序不会终止 但在这个简单的示例中 它会在一分钟后精确退出 任何想法 Runnable r new Runnable Override public v
  • 调整阈值cros_val_score sklearn

    有没有办法设置sklearn的cross val score阈值 我训练了一个模型 然后将阈值调整为 0 22 型号如下 Try with Threshold pred proba LGBM Model predict proba X te
  • Python 3 Windows 服务仅在调试模式下启动

    我首先在中发布了答案这个帖子 https stackoverflow com questions 42586805 python 3 windows service 但不符合论坛标准 我希望这次的回答符合论坛标准 这段代码应该更加清晰易读
  • 当参数未显式传递时,默认使用 lambda 进行用户输入

    我写了下面的代码 仍然想知道它的用途 https codereview stackexchange com questions 242702 how effective is it to default to user input in c
  • Visual Studio 在调试时跳到每隔一行

    我现在尝试单步执行代码 Visual Studio 会跳过所有其他行 我知道它是每隔一个 因为当我有一个 ForEach 循环时 它会碰到在以后的迭代中跳过的行 Visual Studio 是否有任何逻辑原因跳过其他行 UPDATE 我添加
  • 如何迭代 Array.prototype 函数

    我想将所有数组函数包装在数组对象中 但在控制台中 gt gt gt Array prototype gt gt gt prototype undefined 但是当我输入时Array prototype在控制台中它显示自动完成中的所有功能
  • System.Diagnostics.Trace.WriteLine 的结果在哪里?

    在我的代码中 我使用以下命令编写了一些跟踪消息System Diagnostics Trace WriteLine 但是我可以从哪里获取消息呢 我查看了事件查看器 但没有找到它们 Are you debugging Look at the
  • 将 Google Maps JS API ImageMapType 剪辑为多边形

    如何将 Google 地图中的 MapType 剪辑为任意多边形 例如 如果我有一个自定义图像映射类型 https developers google com maps documentation javascript maptypes I
  • Typescript:调用另一个类的“方法”

    我对 java type script 很陌生 在理解它们的概念时遇到了一些困难 我想打电话给method另一个班级的 然而 到目前为止我还没有成功 export class Foo calcSomeThing parameter numb
  • 如何仅使用 javascript 更改 onclick 按钮颜色?

    我试图使用 onclick 和 getElementsByClassName 更改按钮的颜色 并想出了这样的结果 HTML
  • Android 2.3 Webview 中的希伯来字体

    我正在将一个显示希伯来语的应用程序移植到 Android 2 3 2 3 模拟器在 TextView 中正确显示字符串 但是当我尝试将字符串放入 WebView 中时 WebView 只显示乱码 这告诉我希伯来语字体在模拟器中可用 但 we
  • 执行更新时存储过程失败

    我正在使用 PHP 的 SQL Server 驱动程序连接到 SQL Server 2008 Express 现在 我正在尝试用存储过程替换所有 SELECT UPDATE 和 INSERT 语句 这对于只包含 SELECT 语句的 SP
  • 将 Ninject 2.0 与 ASP .Net 3.5 结合使用

    我正在尝试将 Ninject 2 0 与 Asp Net 3 5 Web 应用程序一起使用 以下是 DLLS 及其我正在使用的版本 Ninject dll v2 0 0 0 Ninject Extensions Logging dll v2
  • 对象作为 python 字典中的键

    我试图使用一个对象作为 python 字典中的键 但它的行为方式我不太理解 首先 我创建一个以我的对象为键的字典 package disseminators ContentType application zip http other pr
  • 如何知道下次夏令时调整时钟的时间?

    我很好奇 是否有任何方法可以找出下一次夏令时调整发生时的 UTC 日期 时间 类似于 Windows 报告的内容 参见圆圈 此信息在 Windows 中由 EnumDynamicTimeZoneInformation 函数提供 See ht
  • 从 DataRow 获取值之间的区别

    示例代码 DataTable table new DataTable insert column to table table Columns Add name insert value to table foreach DataRow r
  • 如何处理语义分割中未知类的平均交集(mIOU)?

    我实现了一个 FCN 网络来进行语义分割 我使用 Cityscapes 作为我的数据集 如您所知 Cityscapes 中有一些您在训练过程中忽略的类 它们被标记为 255 我使用加权损失来忽略未知类的损失 将未知类的损失设置为零 现在我想
  • DrawerNavigator 在点击每个选项时始终显示选项卡栏

    我试图拥有一个选项卡栏 并且每个选项卡栏都有自己的堆栈导航器 我拥有的三个选项卡是 家 轮廓 设置 我也想在抽屉里展示这三个选项 我创建了一个抽屉 但只有点击主页才会显示选项卡栏 我想显示选项卡栏 就像您按下个人资料选项卡一样 选项卡栏仍保
  • click() 带有链接

    我有一个页面 其中有一些链接 都是这样的 a href class answer item 10 a 我想使用click 函数来模拟用户点击其中一个 但它在我的测试中似乎不起作用 Evaluate a mathematical expres