Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery函数.on()不';“我不能和”一起工作;点击";事件_Javascript_Jquery_Dynamics Crm 2013 - Fatal编程技术网

Javascript jQuery函数.on()不';“我不能和”一起工作;点击";事件

Javascript jQuery函数.on()不';“我不能和”一起工作;点击";事件,javascript,jquery,dynamics-crm-2013,Javascript,Jquery,Dynamics Crm 2013,我正在与MS Dynamics CRM 2013合作,我面临的问题是,当我想向导航窗格中的“文档”按钮添加事件处理程序时 jQuery函数.on()不适用于“单击”事件。它适用于“mouseover”或“mouseup”事件,但不适用于“click”。 下面是我正在使用的代码: $("#crmMasthead").on( "click", "#Node_navDocument", function(){ alert("Success!"); } ); Where: #crmMasthead

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

jQuery函数.on()不适用于“单击”事件。它适用于“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>
<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>

...
...       
...
用户刚刚在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>
<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>

...
改变:
新的:
...
...
...
试试看

正如所解释的那样,授权是一种方式,你做得很好

正如您在本文中所看到的,第二个div的加载是用一个按钮模拟的,您的代码可以工作

顺便说一句,也许你做过这样的事:

    $("#crmMasthead").on('click', function() {
       $(this).append("<div id=\"Node_navDocument\"> B </div>");
    });
编辑 尝试检查元素的z索引。也许你的div上面还有别的东西。
这个也许可以帮助你

在发布html后编辑2
请注意,您正在绑定单击标记(id为Node_navDocument)。顺便说一句,确保你没有​​单击事件时的任何preventDefault()

不幸的是,在我的例子中,function.on()不能与
click
事件一起使用,因为
#Node\u navDocument
元素的event
click
已绑定到另一个使用
event.stopImmediatePropagation()的系统函数,并且在此之后所有自定义逻辑都不会执行

但是,还有另一种方法

click
事件实现自定义逻辑的主要目标是在该事件之后使用不同的
src
链接显示系统
iframe
。因此,要解决这项任务,我们接下来需要做:

  • 为某个静态元素(1)创建处理程序,该静态元素应绑定元素(2)的
    onclick
    事件
  • 在元素(2)的
    onclick
    事件上创建侦听器,以查看iframe是否存在
元素(1)具有id
#TabNode#tab0Tab
,元素(2)
#Node#navDocument
和iframe-
#区域文档框架

代码如下:

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);
            }
    });  

Node\u navDocument
crmmasthad
的子节点吗?如果不将
crmmasead
替换为相应的父元素。为什么不使用click()$(“#crmmasead”)。单击(..)如果它与
mouseup
一起工作,为什么不使用它呢?如果其他事件正在工作,则可能有东西正在阻止
单击
事件。请发布您的HTML2013为什么在CRM中使用不受支持的自定义?添加此事件的目的是什么?关于第一:不幸的是,它不适用于“click”事件,但适用于“mouseover”和其他事件。关于第二个:#Node_navDocument在导航窗格出现之前不存在于表单上下文中。这帮助我解决了绑定的另一个问题,还需要添加函数(e){e.preventDefault();}使其正常工作。不幸的是,我没有使用append,
#Node_navDocument
在用户打开导航窗格后出现在上下文中(此处适用于内部CRM 2013逻辑)如我在屏幕截图中所述,除“单击”之外的其他事件处理程序工作正常。“出现”…也许如果你发布一些html到Understand div hierarchy,我们可以帮助你..顺便说一句,看一看广告编辑我刚刚发布了有问题的html。请看一看。我不知道,不是我。但我仍然对解决这个问题感兴趣。不幸的是,你的编辑没有帮助。Dynamics CRM.replaceDocument不支持直接访问DOMsLink()将来可能会停止工作,因为id#TabNode_tab0Tab可能会更改(或任何其他id)。与表单交互的唯一安全方法是通过Xrm.Page对象。另一种解决方案是创建自定义功能区按钮,并在单击按钮时运行自定义JavaScript函数。支持使用jQuery for AJAX。有关在Dynamics CRM表单中使用jQuery的详细信息,请查看此处:
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);
            }
    });