簡體   English   中英

jQuery函數.on()不適用於“click”事件

[英]jQuery function .on() doesn't work with “click” event

我正在使用MS Dynamics CRM 2013,我面臨的問題是,當我想在導航窗格中的“Documents”按鈕中添加事件處理程序時,

在此輸入圖像描述

jQuery函數.on()不適用於“click”事件。 它適用於“mouseover”或“mouseup”事件,但不適用於“click”。 這是我正在使用的代碼:

$("#crmMasthead").on( "click", "#Node_navDocument", function(){ alert("Success!"); } );

Where:
#crmMasthead - static selector;
#Node_navDocument - id of the button "Documents", that I want to reload.

請幫我解決這個問題。 先感謝您!

編輯

這是我正在處理的HTML:

用戶在CRM 2013中打開導航窗格之前:

<body>
...
    <div id="crmMasthead" tabindex="-1">
        <div class="navStatusArea" id="navStatusArea"></div>
        <div class='navBar' id='navBar'>...</div>       
        <div class="navBarOverlay" id="navBarOverlay" style="display: none;">     </div>
    </div>
...
</body>

用戶剛剛在CRM 2013中打開了導航窗格:

<body scroll="no">
...
    <div id="crmMasthead" tabindex="-1">
        <div class="navStatusArea" id="navStatusArea"></div>
        <div class='navBar' id='navBar'></div>
Changed:<div class="navBarOverlay" id="navBarOverlay" style="display: block;"></div>
New:    <div class="navActionGroupContainer" style="">
            ...
            <a class="navActionButtonContainer navActionButton     navActionButtonDefault normal " id="Node_navDocument" role="button" title="Documents" href="javascript:;" unselectable="on" style="background-color: #555555">...</a>
            ...
        </div>

    </div>
...
</body>

不幸的是,函數.on()在我的情況下不適用於click事件,因為事件click #Node_navDocument元素已經綁定到另一個使用event.stopImmediatePropagation()系統函數,並且所有自定義邏輯都沒有執行。

但是,還有另一種方式......

實現click事件自定義邏輯的主要目標是在此事件后顯示具有不同src鏈接的系統iframe 因此,要解決此任務,我們需要做下一步:

在此輸入圖像描述

  • 為某些靜態元素(1)創建處理程序,該元素應綁定元素(2)的onclick事件;
  • 在元素(2)的onclick事件上創建監聽器,用於監視iframe是否存在。

元素(1)具有id #TabNode_tab0Tab ,element(2) - #Node_navDocument和iframe - #areaDocumentFrame

這是代碼:

replaceDocumentsLink: function () {
    console.log("Function was started!");
    var listener = {};

    window.top.$("#TabNode_tab0Tab").on("mouseover", function () {
        if (window.top.$('#Node_navDocument').length)
            window.top.$('#Node_navDocument')[0].onclick = function () {
                listener = setInterval(function () {
                    if ($("#areaDocumentFrame").length) {
                        console.log("Frame was found!")
                        $("#areaDocumentFrame").attr("src", "http://www.microsoft.com/");                            
                        clearInterval(listener)
                    }
                    else
                        console.log("Frame was not found!")
                }, 250);
            }
    });  

嘗試

jQuery(document).on('click', '#Node_navDocument', function() {
    alert("Success!");
});

要么

jQuery('#Node_navDocument').click(function() {
    alert("Success!");
});

正如這里所解釋的那樣,代表團就是這樣,你做得很好。

正如您在本演示中所看到的,使用按鈕模擬第二個div的加載,您的代碼可以正常工作。

順便說一下,也許你做過這樣的事情:

    $("#crmMasthead").on('click', function() {
       $(this).append("<div id=\"Node_navDocument\"> B </div>");
    });

如果你使用append,當你點擊“#Node_navDocument”時,可能會再次調用上面的代碼而不是:

   $("#crmMasthead").on('click', "#Node_navDocument", function() {
          .......
   });

編輯

嘗試檢查元素的z-index。 也許你的div之上還有別的東西。
這個其他演示也許可以幫到你。

發布html后編輯2

請注意,您綁定了一個標簽(ID為Node_navDocument)。 順便說一句,確保你沒有在click事件上放置任何preventDefault()!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM