javascript
  • jquery
  • html
  • 2017-08-15 109 views -1 likes 
    -1

    的HTML:锚链接需要两次点击触发事件

    <asp:TextBox ID="dataTextBox" MaxLength="10" runat="server"></asp:TextBox> 
    
    <a class='new_message' onclick='focusMethod();' tabindex='-1' href='#dataTextBox"> New Message</a>"; 
    

    jQuery函数:

    function focusMethod() { 
         $('[class=new_message]').click(function (e) { 
          e.preventDefault(); 
          $($(this).attr('href')).focus(); 
         }); 
        } 
    

    当我点击的锚链接的重点应该去输入文本框。但它需要2次点击才能执行。

    我的方案是:

    1. 的onclick在锚标记用来防止默认行为,即发射的HREF。

    2. 我建立一个访问的形式,所以我需要与价值的HREF(所以我将能够使用的href =“#”)

    3. 如果我只使用了Click事件处理程序没有它的功能是未触发(代替HREF被发射以及焦点不会文本框)

    它需要2次点击,因为该函数focusMethod首先被烧成,然后事件处理程序被安装。 有什么办法避免执行功能“focusmethod”,只有执行的单击事件处理?

    +0

    我的意思是......你有一个click事件,结合click事件,这则最后进行的动作。所以你必须再次点击第二个事件才能发生,因为它在第一次点击时不存在...... *逻辑* –

    回答

    1

    因为你的方法focusMethod结合一个新的单击事件,然后执行下一次你单击该元素。只需删除内联点击事件onclick='focusMethod();',因为它不需要。然后,而不是一个功能,你可以这样做:

    $('[class=new_message]').click(function (e) { 
        e.preventDefault(); 
        $($(this).attr('href')).focus(); 
    }); 
    

    编辑:

    因为你的元素是动态的,你需要使用$(document).on(...)代替,否则选择$(...).click(..)是不会找到元素它在设置点击事件绑定时不存在。

    下面是与所述元件被动态创建一个基本的例子:在HTML

    $(document).on("click", "[class=new_message]", function (e) { 
     
        e.preventDefault(); 
     
        console.log("clicked"); 
     
        $($(this).attr('href')).focus(); 
     
    }); 
     
    
     
    $("body").html("<a class='new_message' tabindex='-1' href='#dataTextBox'> New Message</a>");
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

    +0

    点击事件代码应该去哪里?因为点击事件处理程序没有被触发 – raj

    +0

    @raj通常你在'document.ready'中放置事件处理程序。 –

    +0

    即使如果我将我的代码放在document.ready中,它也不起作用。锚链接是动态生成的。跟它有什么关系。 – raj

    0

    这需要2次点击,因为该功能focusMethod是先开炮,然后事件处理程序连接。

    你已经正确识别,你需要点击运行包含了jQuery .click函数的函数问题,只要完全消除focusMethod()功能(和onclick)。

    $('.new_message').click(function(e) { 
     
        e.preventDefault(); 
     
        $($(this).attr('href')).focus(); 
     
    });
    <asp:TextBox ID="dataTextBox" MaxLength="10" runat="server"></asp:TextBox> 
     
    
     
    <a class='new_message' tabindex='-1' href='#dataTextBox'>New Message</a>

    +0

    它似乎在Firefox中不起作用。点击事件代码应该放在哪里?我可以将代码放置在js文件的任何位置吗? – raj

    0
    1. 移除点击事件。
    2. 仅在JS中使用class.click。
    3. href你打开单引号,但双引号关闭。

    $('[class=new_message]').click(function(e) { 
     
        e.preventDefault(); 
     
        $($(this).attr('href')).focus(); 
     
    });
    <a class='new_message' tabindex='-1' href='#dataTextBox'> New Message</a>

    相关问题