我在我的项目中使用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");
}
请为此建议一些解决方案。
答案 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
标记。