gpt4 book ai didi

javascript - 如何停止 JSF 重新加载页面 "onclick"?

转载 作者:行者123 更新时间:2023-11-30 18:42:33 26 4
gpt4 key购买 nike

我从原生 NPAPI/XPCOM/ActiveX 获取 JavaScript 的结果。以前用户通过以下方式激活 native GUI:

   <h:commandLink styleClass="send-doc-link" value="#{msg.send}"       onclick="javascript:signDocument('data');return true;"       action="#{internalPayment.sendDocument}"/>

和 JavaScript 函数“signDocument”在用户退出附加 GUI 后完成执行。

我将 native 代码切换到异步模型。所以 JS func 'signDocument' 立即返回执行并且必须最近获取结果。

我写的JS代码是这样的:

function signDocument(dataTagID, tagID4Event) {    var npapi = document.getElementById("npapi");    npapi.Sign(langId, content, desc, ts, sign);    mylog("OK");    var scheduler = setInterval(           function() {                    mylog("FAIL");                    if (npapi.AddonGetState() != "finished")                        return;                    clearInterval(scheduler);                    out_sign = npapi.SignValue();                    fireHTMLEvent(tagID4Event, 'click');            }, 1000);    }}

尝试在 1 秒间隔内获得结果并通过触发“点击”事件模拟链接按下。在测试静态 HTML 测试中一切正常。

我将 .jsf 文件重写为:

  <h:commandLink styleClass="send-doc-link" value="#{msg.send}"    onclick="javascript:signDocument('data', 'signDocumentCallbackID');return true;"/>  <t:commandLink styleClass="hidden" id="signDocumentCallbackID" forceId="true"    onclick="return true;" action="#{internalPayment.sendDocument}"/>

我希望调度程序获取结果并触发事件。但是调度程序不会被调用,因为在用户单击第一个链接(可见)后,JS 调用 native 代码,该代码为 GUI 创建单独的线程并执行返回给 JS。下一页重新加载,似乎所有 JS 对象都随着页面的消失而消失(我通过“mylog”函数检查)。

真正先将h:commandLink标签转换为:

<a href="#" onclick="var cf = function(){javascript:signDocument('data', 'signDocumentCallbackID');return true;};var oamSF = function(){return oamSubmitForm('j_id_jsp_179411707_1','j_id_jsp_179411707_1:j_id_jsp_179411707_5');};return (cf()==false)? false : oamSF();" class="send-doc-link">...

因此在我的 JS 代码中添加了 oamSubmitForm,这似乎重新加载了我的页面并删除了 sheduler。

如何停止将特殊代码包含到onclick=""

最佳答案

如果您不需要使用链接调用同步支持 bean 操作,则只需替换 <h:commandLink>通过 <h:outputLink>或者只是 <a> .

<h:outputLink styleClass="send-doc-link" onclick="signDocument('data', 'signDocumentCallbackID')">
<h:outputText value="#{msg.send}" />
</h:outputLink>

<a href="#" styleClass="send-doc-link" onclick="signDocument('data', 'signDocumentCallbackID')">
<h:outputText value="#{msg.send}" />
</a>

请注意 javascript:伪协议(protocol)和 return true;完全是多余的。两者都已经是默认值。您可能还会使用 return false;相反,这样链接的默认操作(转到页面顶部)将被阻止。

关于javascript - 如何停止 JSF 重新加载页面 "onclick"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6424210/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com