【问题标题】:Click anchor element using javascript function使用javascript函数单击锚元素
【发布时间】:2017-07-07 19:15:55
【问题描述】:

我知道这个网站的其他地方以及许多其他地方已经介绍了这一点,但我似乎无法弄清楚。

我有一个用于显示灯箱表单的锚标记:

<a id="aNoData" href="#divNoData" class="fancybox">No Data</a>

我想使用 javascript 函数点击它:

function fnNoData()
{
    //  This line works
    alert("this line works");   
    //  Neither of these lines work
    $('#aNoData').click();
     document.getElementById('aNoData').click();
} 

我从后面的代码中调用函数,如下所示:

ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "fnNoData()", true); 

当我这样做时,第一行(警告框)显示正常。但是,其他两行(单击锚标记)没有。如果我将非工作行放在我的 $(document).ready 块中(锚点在页面加载时单击),它们会很好地工作。所以似乎点击我的锚点的线条工作正常,只是不在我的功能中。

谁能看出我做错了什么?

【问题讨论】:

  • “如果我将它们放在我的 $(document).ready 块中,效果很好” 如果它们在那里工作正常,那么你当前调用它们的位置被调用得太早了,表示该元素尚不存在,或者灯箱库还没有时间为该元素设置自己的功能
  • 尝试在页面底部的脚本中添加您的函数。
  • 好的,帕特里克,谢谢,我确实尝试将整个函数放在我的 $(document).ready 块中,但它根本不起作用。您能提出解决方案吗?
  • 谢谢Difster,我之前试过了。结果相同。
  • 将整个函数放在就绪块中会使其作用于该块,因此无法在该块之外调用(您会看到 "fnNoData is not a功能错误” 控制台中的消息。)

标签: javascript jquery html function anchor


【解决方案1】:

如果你想直接点击而不是使用trigger

检查这个希望这会对你有所帮助。

function fnNoData()
{
    //  This line works
    alert("this line works");   
    //trigger
    $('#aNoData').trigger('click');
    //document.getElementById('aNoData').click();
} 

【讨论】:

  • 感谢 Nirav,这是我尝试过的众多事情之一。结果相同。
【解决方案2】:

jquery 点击事件需要一个函数 (未测试)

$('#aNoData').on("click", function() {
  console.log( "clicked the element with id aNoData );
});

如果您想触发点击(没有实际点击),jquery 也有一个功能: http://api.jquery.com/trigger/

【讨论】:

  • 感谢 jpanzar。结果相同。
【解决方案3】:

引用您的评论

好的 Patrick,谢谢,我确实尝试将整个函数放在我的 $(document).ready 块中,但它根本不起作用

您不应该在$(document).ready() 内部定义整个函数,而是在外部定义它并从ready() 函数内部调用它

你原来的函数

function fnNoData(){
    //  This line works
    alert("this line works");   
    //  Neither of these lines work
    $('#aNoData').click(); 
}

ready()拨打电话

jQuery(document).ready(function () {
    fnNoData();
});

希望这会有所帮助!

【讨论】:

  • 谢谢詹姆斯,是的,这会起作用,但我需要从后面的代码中调用我的函数(请参阅我的原始帖子)。我只是把东西放在我的 document.ready 块中,看看它是否有效,它确实有效。仍未解开的谜团是为什么代码可以在那里工作,但不能在我的函数中工作。
【解决方案4】:

花了几个小时,但我终于强行解决了。

正如一些回复者所建议的,我背后的代码试图在所有元素完全加载之前使用 DOM。我通过将代码后面的行更改为以下代码来解决这个问题:

ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "$(window).load(function() {fnNoData();});", true);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 2013-06-09
    • 2018-05-08
    • 2020-11-10
    • 1970-01-01
    • 2022-01-11
    • 2019-07-13
    相关资源
    最近更新 更多