我目前正在尝试确保在文本框中输入的数字可分为1.25或1.5。我决定天气将数字修改1.25或1.5的方式取决于另一个下拉列表中的内容。例如:如果DDL的选定索引为1,则I mod为1.5,如果为2 I mod为1.25。
但是我需要向用户显示错误抛出的原因。自定义验证器的错误消息需要类似“数字必须由1.25设计”,反之亦然。
从我可以告诉我代码应该工作。但事实并非如此。我在另一个论坛上看到,获取源代码并将innerText作为错误消息应该可以解决问题。但我必须在某处做错事。当我单步执行我的javascript函数时,它会完美地逐步完成。只是没有错误消息。这是我的代码:
<asp:CustomValidator ID="ValidateFinHeight" runat="server" CssClass="NormLabel"
Display="Dynamic"
ControlToValidate="txtFinHeight"
ClientValidationFunction="validateFinHeight"></asp:CustomValidator>
<script type="text/javascript" language="javascript" >
function validateFinHeight(source, arguments)
{
var ddl = document.getElementById('cboTubeDia');
var ddlSelIndex = ddl.selectedIndex
switch(ddlSelIndex)
{
case 0:
arguments.isValid = true;
return;
case 1:
if(arguments.value%1.25 != 0)
{
source.innerText = "Height must be divisibly by 1.25";
arguments.isValid = false;
return;
}
else
{
arguments.isValid = true;
return;
}
case 2:
if(arguments.value%1.5 != 0)
{
source.innerText = "Height must be divisibly by 1.5";
arguments.isValid = false;
return;
}
else
{
arguments.isValid = true;
return;
}
}
}
</script>
答案 0 :(得分:5)
根据区分大小写(例如IsValid
和Value
),您的javascript函数中存在一些小错误。我已经调试它以查看我必须设置的Error-Span的属性。这是Firefox的textContent
属性和IE的innerText
。
工作功能(支持跨浏览器):
function validateFinHeight(source, args) {
var ddl = document.getElementById('cboTubeDia');
var ddlSelIndex = ddl.selectedIndex;
var errorMsg = "";
switch (ddlSelIndex) {
case 0:
args.IsValid = true;
return;
case 1:
if (args.Value % 1.25 != 0) {
errorMsg = "Height must be divisibly by 1.25";
if (source.innerText) {
source.innerText = errorMsg;
} else {
source.textContent = errorMsg;
}
args.IsValid = false;
return;
}
else {
args.IsValid = true;
return;
}
case 2:
if (args.Value % 1.5 != 0) {
errorMsg = "Height must be divisibly by 1.5";
if (source.innerText) {
source.innerText = errorMsg;
} else {
source.textContent = errorMsg;
}
args.IsValid = false;
return;
}
else {
args.IsValid = true;
return;
}
}
}
答案 1 :(得分:4)
很抱歉,无法以访客身份评论其他答案。我想指出问题的问题以及Tims的回答:
使用'arguments'作为参数名称可能会导致麻烦(至少我刚刚在firefox 20中遇到过),因为它也是一个自动变量,它包含传递给函数的所有参数,所以有一个名字如果参数的命名方式相同,则会发生冲突。我建议将参数名称更改为'args'或其他任何内容。