Javascript jQuery函数.on()不';“我不能和”一起工作;点击";事件
我正在与MS Dynamics CRM 2013合作,我面临的问题是,当我想向导航窗格中的“文档”按钮添加事件处理程序时 jQuery函数.on()不适用于“单击”事件。它适用于“mouseover”或“mouseup”事件,但不适用于“click”。 下面是我正在使用的代码: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
$("#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
元素的eventclick
已绑定到另一个使用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);
}
});