不点击即可触发onclick事件

3

我创建了一个新闻聚合网站,它还能测量帖子的受欢迎程度。我已经设置好了HTML和jquery,这样当你点击链接时,它也会计算点击的次数。

<a class="headline" href="www.example.com/a" target="_newWindow" onclick="incStoryClicksCount('15280681', '_on_click_handler');  return wopen('www.example.com/a');" rel="nofollow">Example A</a>

然而,我需要测试以查看它是否有效。在查看网站时,有没有比多次点击来尝试增加计数更简单的方法?我想尝试通过Chrome控制台(F12)触发它,使其计为一次点击。然而,我不知道该如何做。
我考虑的另一种选择是,在Chrome中按下F12时更改代码,使其在我稍微移动鼠标或点击按钮时触发,而不是“点击”。但是,我也不太知道如何执行此操作。

我认为你可以在window.load上传递那个onclick函数。 - Jishnu V S
@Naila 你说得没错,但是我想要频繁触发这个函数,所以需要花费很大的力气来不断刷新页面。 - Will Fisher
你为什么想要计算点击次数而不是在服务器上记录每个页面被导航到的频率? - KWeiss
@LeGEC 当我这样做时,它只会返回“未定义”? - Will Fisher
@KWeiss 因为这些页面是外部网页。 - Will Fisher
显示剩余2条评论
5个回答

6
您可以使用jQuery的.click()方法。例如:
$('a.headline').click();

它将会触发该事件


已修复。谢谢伙计! - prtdomingo
谢谢帮忙,那个方法可行,但每次在控制台输入后我必须关闭弹出窗口。有没有办法可以在控制台中输入 incStoryClicksCount('15280681'); 或类似的内容,以便我可以无需点击即可更改日期? - Will Fisher
你的意思是,你想在控制台上调用incStoryClicksCount函数? - prtdomingo

1
如果您将数据保存到数据库中,只需修改数据库中的值即可。
如果您想测试的是点击事件,有一些程序可以模拟加载到网站中,这些网站可以在您的网站上启动点击。
一个更好、更简单的方法可能只是将您的点击事件启动到JavaScript循环中。
function launchMyClick(newsObject) {
    for(var x = 0; x < 1000; x++)
        newsObject.click(); //newsObject is the jQuery object representing your link.
}

只需为每条新闻调用此函数多次,您就会看到它被点击了1000次的效果。


0
你可以尝试为链接添加另一个事件,比如mouseover,这样可能更容易触发多次,并稍微更新它们的功能以避免打开文章:

// Just mocking the functions in your code:

function _on_click_handler() {
  console.log('_on_click_handler() called.');
}

function incStoryClicksCount(id, handlerKey) {  
  console.log(`\nincStoryClicksCount(${ id }, ${ handlerKey }) called.`); 
  
  const handler = window[handlerKey];
  
  if (handler) handler();
}

function wopen(href) {
  console.log(`wopen(${ href }) called.`); 
  
  return false;  
}

// Let's create a function to replace wopen that won't open
// a link:

function noop() {
  console.log(`noop() called.`);
  
  return false;
}

// Let's grab all links and attach a mouseover event to them
// with  similar code to their original `onclick`:

Array.from(document.querySelectorAll('.link')).map((link) => {
  link.setAttribute('onmouseover',
    link.getAttribute('onclick').replace(/wopen\(/g, 'noop(')
  );
});
<a class="link" href="https://keyjs.dev/123" onclick="incStoryClicksCount('123', '_on_click_handler'); return wopen('https://keyjs.dev/123');">123</a>

<a class="link" href="https://keyjs.dev/456" onclick="incStoryClicksCount('456', '_on_click_handler'); return wopen('https://keyjs.dev/456');">456</a>

<a class="link" href="https://keyjs.dev/789" onclick="incStoryClicksCount('789', '_on_click_handler'); return wopen('https://keyjs.dev/789');">789</a>


0
你可以通过将一个元素绑定到另一个事件(例如“keydown”)来触发它的“click”事件。这里是一个简单的例子:https://jsfiddle.net/wdop7ydk/1/ HTML
<a id='myLink' href='#'>My link</a>

JS/JQuery

let myLink = $("#myLink");

myLink.on('click', function() {
  console.log("Clicked");
});

$(document.body).on("keydown", function(e) {
  if ( e.keyCode === 13 ) {
    myLink.trigger("click"); // Or myLink.click(), as prtdomingo suggested.
  };
});

在这里,每次按下回车键时,链接的“点击”事件都会触发。(如果需要,您可以在此处查找键盘按钮的代码:http://keycode.info。)


e.keyCode已经被弃用。您应该使用e.keye.code代替。此外,请查看另一个工具:https://keyjs.dev - Danziger

0

如果你想测试你的 incStoryClicksCount 函数,只需调用它:

incStoryClicksCount('15280681', '_on_click_handler');

如果由于某些原因您的incStoryClicksCount使用了this参数,这里有一种方法可以使用与实际<a>节点链接的this参数调用该函数:
# adapat the following code to select a relevant 'a' node :
# this specific example will fetch the first 'a' node with class 'headline'
# in the whole page
var a = $('a.headline').get(0);

# call function and specify what value should be used as 'this' :
incStoryClicksCount.call(a, '15280681', '_on_click_handler');

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