jQuery函数.on()不适用于“click”事件

时间:2014-03-04 15:29:07

标签: javascript jquery dynamics-crm-2013

我正在使用MS Dynamics CRM 2013,我面临的问题是,当我想在导航窗格中的“文档”按钮中添加事件处理程序时,

enter image description here

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>

3 个答案:

答案 0 :(得分:3)

不幸的是,函数.on()在我的情况下不适用于click事件,因为click元素的事件#Node_navDocument已绑定到使用{的另一个系统函数{1}}并且此后所有自定义逻辑都不会执行。

但是,还有另外一种方式......

为此event.stopImmediatePropagation()事件实施自定义逻辑的主要目标是在此事件后显示具有不同click链接的系统iframe。因此,要解决此任务,我们需要做下一步:

enter image description here

  • 为某些静态元素(1)创建处理程序,该元素应绑定元素(2)的src事件;
  • 在元素(2)的onclick事件上创建侦听器,以便观察iframe是否存在。

元素(1)的标识为onclick,元素(2) - #TabNode_tab0Tab和iframe - #Node_navDocument

以下是代码:

#areaDocumentFrame

答案 1 :(得分:2)

尝试

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

或者

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

答案 2 :(得分:-1)

代表团,正如here所解释的那样,是你的方式,并且你做得很好。

正如您在此demo中所看到的那样,使用按钮模拟第二个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上面还有别的东西。
其他demo也许可以帮到你。

发布html后

编辑2

请注意,您绑定了一个标签(ID为Node_navDocument)。顺便说一句,确保你没有在click事件上放置任何preventDefault()!