Struts - JSP - 使用Java Script基于复选框状态启用/禁用按钮和文本框

时间:2011-11-17 14:24:25

标签: javascript jsp checkbox struts

我在我的项目中使用struts框架。在我的JSP上使用了一个复选框,一个按钮和一个文本框。以下是所有这些代码。

<html:text  name="FormBean" styleId = "codeERText" property="codeER" onFocus="change_classe_byId(this,'on');" onBlur="change_classe_byId(this,'off');" styleClass="off" maxlength="5"/>

<input type="button" styleId = "deduireButton" name = "deduireButton" id = "deduireButton" value="<bean:message key="Property.deduire"/>"   onClick="javascript:validate('DEDUIRE');">

<html:checkbox styleId="idBrodcastCheckbox" property="sentToAll" name="FormBean" onChange="javascript:broadcastValidate();"  />

要求是选中复选框时,应禁用按钮和文本框,反之亦然。

以下是在Checkbox的onChange事件中调用的函数。 在Application上运行它时,它只是提供第一个警报(“内部广播验证”)..没有引发其他警报..也没有禁用按钮或文本框。我相信,它不会进入任何If / Else对。

使用的App Server是Weblogic 8.1。

function broadcastValidate(){

    alert("Inside Broadcast Validate");
    if(document.forms[0].idBrodcastCheckbox.checked == true)
    {
        alert("checked true");
        document.forms[0].codeERText.disabled = true;
        document.forms[0].deduireButton.disabled = true;
    }
    else
    {
        alert("checked false");
        document.forms[0].codeERText.disabled = false;
        document.forms[0].deduireButton.disabled = false;
    }

    alert("First If over");

    if(this.document.FormBean.getElementById("idBrodcastCheckbox").checked == true)
    {
        alert("checked true 2");
        this.document.getElementById("codeERText").disabled = true;
        this.document.getElementById("deduireButton").disabled = true;
    }
    else
    {
        alert("checked false 2");
        this.document.getElementById("codeERText").disabled = false;
        this.document.getElementById("deduireButton").disabled = false;
    }
    alert("Second If over ");

    if(document.forms[0].sentToAll.value == true)
    {
        alert("checked true - Sent to All");
        document.forms[0].codeERText.disabled = true;
        document.forms[0].deduireButton.disabled = true;
    }
    else
    {
        alert("checked false - Sent to All");
        document.forms[0].codeERText.disabled = false;
        document.forms[0].deduireButton.disabled = false;
    }

    alert("Third If over - Exiting Broadcast Validate");
}

请为此建议一些解决方案。

2 个答案:

答案 0 :(得分:0)

绝对不会是this.document.FormBean.getElementById()因为getElementById()是文档上的方法。要通过id获取元素,这是我在这种情况下要做的,请使用:

document.getElementById('idBrodcastCheckbox')

您不需要在复选框中指定name属性;默认情况下,假定属性存在于操作ActionForm上。除非你专门做一些不同的事情,否则使用框架的默认值。

如果您甚至没有收到"First If over"提醒,请检查您的JavaScript控制台。

答案 1 :(得分:0)

我已尝试过您的代码,document.forms[0].idBrodcastCheckbox.checked会返回true。当您说除"Inside Broadcast Validate"之外的任何其他内容都被警告时,可能在第一个警报语句后发生错误。正如Dave所提到的,使用您的Javascript控制台查看任何错误。另外,请检查您是否错过了应将元素保留在其中的html:form标记。