Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.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 禁用a<;p:menuitem>;在页面加载期间_Javascript_Jquery_Jsf_Primefaces - Fatal编程技术网

Javascript 禁用a<;p:menuitem>;在页面加载期间

Javascript 禁用a<;p:menuitem>;在页面加载期间,javascript,jquery,jsf,primefaces,Javascript,Jquery,Jsf,Primefaces,我有一个,它将用户引导到一个新页面,完全加载页面需要一些时间。现在我遇到了这个问题,当用户在页面加载过程中再次单击菜单项时,应用程序就会崩溃(表示找不到要更新的组件)。我还没有找到错误的原因,但我认为在页面加载完成之前阻止用户再次单击同一个菜单项是有意义的,我尝试了几种方法,但都没有解决。我现在要去的地方如下: <h:form id="maninmenuform"> <script type="text/javascript" > $(docume

我有一个
,它将用户引导到一个新页面,完全加载页面需要一些时间。现在我遇到了这个问题,当用户在页面加载过程中再次单击菜单项时,应用程序就会崩溃(表示找不到要更新的组件)。我还没有找到错误的原因,但我认为在页面加载完成之前阻止用户再次单击同一个菜单项是有意义的,我尝试了几种方法,但都没有解决。我现在要去的地方如下:

<h:form id="maninmenuform">
    <script type="text/javascript" >
        $(document).ready(function(){
            $("#ssss").click(function(){
                $(this).attr("disabled", true);
            });
        });
    </script>

....
 <p:menuitem id="ssss" value="#{msg['capacity.headline']}"
                       icon="ui-icon-note"
                       url="/page/workload/workloadOverview.xhtml"
                       rendered="#{loginBean.projectAccess()}" />

$(文档).ready(函数(){
$(“#ssss”)。单击(函数(){
$(this.attr(“disabled”,true);
});
});
....

谁能看一下,看看那里少了什么?非常感谢

据我所见,您试图通过在页面完全加载后附加onclick事件来禁用它

我认为您应该在代码中从一开始就将其设置为“禁用”:

然后添加一些JavaScript以删除禁用的属性:

$(document).ready(function () {
    $("[id='form:ssss']").removeClass("ui-state-disabled"); 
});
其中
form:s
是您的
id,后跟您的
id

编辑:

上述方法不会恢复单击事件和菜单导航

要处理此问题,您需要从
中删除
disabled=“true”
,并替换为

然后,将JS替换为:

$(document).ready(function () {
     $("[id='form:s']").removeAttr('onclick');
});
编辑2:

此代码:

<h:form id="form">
  <p:menu>
    <p:menuitem id="s" value="Menu" onclick="return false" />
  </p:menu>
</h:form>

允许元素在页面完全加载后再次处理单击。

在loginBean中定义一个标志

private boolean menuItemEnabled;

public boolean isMenuItemEnabled()
{
    return menuItemEnabled;
}
public void enableMenuItem()
{
    menuItemEnabled = true;
}
最初禁用菜单项:

<p:menuitem id="ssss" disabled="#{loginBean.menuItemEnabled}" ... />
在页面加载时调用remoteCommand

$(document).ready(function () {
    enableMenuItem();
});

只是尝试过,但没有成功-菜单项始终处于禁用状态。在我看来,语句“$(this).attr(“disabled”,true/false);”不知何故根本没有任何效果。在这种情况下,也许这不是控制元素的正确方法。我只是尝试了一下,但仍然不起作用。我使用firebug来定位元素,但没有看到属性“onclick”。这样,如果我删除了javascript代码,并且一切都按预期工作,那么当我单击菜单项时就不会发生任何事情了,对吗?好的,我看到了“onclick”属性,但不知何故,脚本仍然无法工作。我应该将标签放在表单的内部还是外部?@friedrichx脚本应该在页面的底部,您需要确保包含jQuery。仍然不走运,现在菜单项被永久禁用。顺便说一句,“JQuery已经包含在每个有primefaces组件的页面上,无需再次包含。”
<p:remoteCommand name="enableMenuItem" action="#{loginBean.enableMenuItem}"
    process="@this" render=":maninmenuform:ssss"/>
public void enableMenuItem()
{
    menuItemEnabled = true;
}
$(document).ready(function () {
    enableMenuItem();
});