javascript
  • jquery
  • html
  • 2017-08-15 168 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>

    相關問題