好的,是时候打电话给专家了:有谁能告诉我如何正常工作?!
背景:我们有一个PHP网络表单,客户端有一个下拉字段,例如汽车类型,他们点击该下拉列表中的值,并显示特定于该选择的字段集。客户端可能在所有部分中都有必填字段,但当然并非所有字段集都始终显示,因此如果字段没有WxH,表示当前未显示,则忽略必需的/验证字段标志,但是如果WxH> 0,停止进程,显示错误消息。
这是假设发生的事情: json根据需要收集标记的所有字段:
[var fieldList = <?php echo "new Array(". trim(json_encode($reqFlds), '[]').")"; ?>;]
用户点击提交按钮 json数组传递下面的函数,然后应该确定标记为required的字段的宽度和高度是否> 0 if> 0表示该字段当前正在屏幕上显示,因此在填写所需字段之前不应提交表单,应显示msgs。
使用FB,我看到它经历了一次循环,检查isVisible(),转到“return blankFields;”并停止。
我会把它归结为星期五,不知道我是如何错过添加实际的脚本。现在我明白为什么没有人回应:
function checkRequired(fieldList) {
var field = null,
blankFields = [],
listText = [], listItem = [], fieldId = [], label = [];
for (var i = 0; i < fieldList.length; i++) {
listText = fieldList[i];
listText = listText.substring(1, listText.length - 1);
listItem = listText.split("||");
fieldId = listItem[0];
label = listItem[1];
field = document.getElementById(fieldId);
if (isVisible(field) && isBlank(field)) {
blankFields.push(label);
}
return blankFields;
}
function isVisible(field) {
if (field.offsetWidth == 0 || field.offsetHeight == 0) return true;
}
function isBlank(field) {
if ((field.type == "text" || field.type == "textarea") && field.value == "") return true;
if (!(field.checked || field.selected || field.selectedIndex > -1)) return true;
return false;
}
if (blankFields.lentgh > 0 || blankFields.lentgh == 0) {
displayError(blankFields);
return false;
} else {
return true;
}
}
function displayError(blankFields) {
var Errmsg = "The must fill in the following fields in order to save your request:\n\n";
for (var i = 0; i < blankFields.length; i++) {
Errmsg += blankFields[i] + "\n";
alert(Errmsg);
}
}
非常感谢任何帮助。
注意:它不会返回到“blankdFields.push(lable);”的if语句。在进行isVisible功能检查后
答案 0 :(得分:0)
你的问题似乎是语法上的。
你有:
function checkRequired(fieldList) {
var field = null,
blankFields = [],
listText = [], listItem = [], fieldId = [], label = [];
for (var i = 0; i < fieldList.length; i++) {
listText = fieldList[i];
listText = listText.substring(1, listText.length - 1);
listItem = listText.split("||");
fieldId = listItem[0];
label = listItem[1];
field = document.getElementById(fieldId);
if (isVisible(field) && isBlank(field)) {
blankFields.push(label);
}
return blankFields;
}
看起来好像你错过了一个闭合支撑;你已经搞砸了你的范围了。在return
语句之前添加右括号。因为你没有这个大括号,所以函数在第一个循环后中止,因为它遇到return
语句,导致函数停止执行并返回blankFields
。
你想要的是这个:
function checkRequired(fieldList) {
var field = null,
blankFields = [],
listText = [], listItem = [], fieldId = [], label = [];
for (var i = 0; i < fieldList.length; i++) {
listText = fieldList[i];
listText = listText.substring(1, listText.length - 1);
listItem = listText.split("||");
fieldId = listItem[0];
label = listItem[1];
field = document.getElementById(fieldId);
if (isVisible(field) && isBlank(field)) {
blankFields.push(label);
}
}
return blankFields;
}
那应该解决眼前的问题。希望这会有所帮助。