//获得某年的某个月有多少天 或者说 某年某月的最后一天是多少。
function getDays(year, month)
{
switch (parseInt(month, 10))
{
case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31;
case 4: case 6: case 9: case 11: return 30;
case 2: return isLeapYear(year) ? 29 : 28;
}
}
//获取当前时间,返回格式:yyyy-mm-dd
function getToday(){
var date = new Date();
var month = date.getMonth()+1<10 ? "0"+(date.getMonth()+1) : (date.getMonth()+1);
var day = date.getDate()<10 ? "0"+(date.getDate()) : (date.getDate());
return date.getYear()+"-"+month+"-"+day;
}
//数组中是否包含了指定元素
Array.prototype.contains = function(obj)
{
for (var i = 0; i < this.length; i++)
if (this[i] === obj) return true;
return false;
}
//向数组末尾添加一个元素
Array.prototype.add = function(obj)
{
this[this.length] = obj;
}
/*
设置选择框按钮的选中状态
@param checkBox 选择框按钮的名称
@param checked true选中所有,false取消所有。
此参数可省略,省略时,每一次调用该方法都会循环的选中、取消、选中...
*/
function setCheckedState(checkBox, checked)
{
if (!checkBox) return;
var checked;
if (typeof(flag) != "undefined")
checked = flag;
if (checkBox.length)
{
checked = !checkBox[0].checked;
for (var i = 0; i < checkBox.length; i++)
checkBox[i].checked = checked;
}
else
checkBox.checked = !checkBox.checked;
}
//获得选择框按钮组被选中的个数
function checkedSize(checkBox)
{
var size = 0;
if (typeof(checkBox) != undefined)
{
if (checkBox.length)
{
for (var i = 0; i < checkBox.length; i++)
if (checkBox[i].checked) size++;
}
else if (checkBox.checked) size++;
}
return size;
}
/*
清除单选、多选按钮组的选中状态
@param field:单选或多选按钮组的名称
*/
function clearChecked(field)
{
if (field)
{
if (!field.length)
field.checked = false;
else
for (var i = 0; i < field.length; i++)
field[i].checked = false;
}
}
/*
清除指定表单的字段值。
如果表单字段为 文本框 ,则清空
如果表单字段为 下拉选择框 ,则选择第一项
如果表单字段为单选或多选按钮,则全清选中状态
*/
function clearForm(theForm)
{
var len = theForm.elements.length;
for (var i = 0; i < len; i++)
{
with (theForm.elements[i])
{
switch (tagName)
{
case "INPUT":
var inputType = getAttribute("type");
if (inputType == "text")
value = "";
else if (inputType == "checkbox" || inputType == "radio")
clearChecked(theForm.elements[i]);
break;
case "SELECT":
selectedIndex = 0;
break;
}
}
}
}
/*
从源列表框向目标列表框复制元素
@param fromSelect 源列表框对象
@param toSelect 目标列表框对象
*/
function copySelect(fromSelect, toSelect)
{
var fOpts = fromSelect.options;
var tOpts = toSelect.options;
for (var i = 0; i < fOpts.length; i++)
{
if (fOpts[i].selected)
{
for (var j = 0; j < tOpts.length; j++)
{
var repeat = false;
if (tOpts[j].value == fOpts[i].value)
{
repeat = true;
break;
}
}
if (!repeat) tOpts.add(new Option(fOpts[i].text, fOpts[i].value));
}
}
}
/*
移除列表框中的元素
@param select 列表框对象
*/
function removeSelect(select)
{
for (var i = select.options.length - 1; i >= 0; i--)
if (select.options[i].selected)
select.remove(i);
}
/*
移动源列表框中选中的项目到目标列表框中,并按照指定排序函数对列表框中的值进行排序。
@param fromSelect 源列表框对象
@param toSelect 目标列表框对象
@param compare 比较大小函数,用于排序目的。
*/
function moveSelect(fromSelect, toSelect, compare)
{
outer:
for (var i = fromSelect.length - 1; i >= 0; i--)
{
if (fromSelect[i].selected)
{
var opt = new Option(fromSelect[i].text, fromSelect[i].value);
fromSelect.remove(i);
if (toSelect.length > 0)
{
for (var j = 0; j < toSelect.length; j++)
{
if (compare(opt.value, toSelect[j].value) < 0)
{
toSelect.add(opt, j);
continue outer;
}
}
}
toSelect.add(opt);
}
}
}
/*
移动源列表框中所有的项目到目标列表框中,并按照指定排序函数对列表框中的值进行排序。
@param fromSelect 源列表框对象
@param toSelect 目标列表框对象
@param compare 比较大小函数,用于排序目的。
*/
function moveAllSelect(fromSelect, toSelect, compare)
{
outer:
for (var i = fromSelect.length - 1; i >= 0; i--)
{
var opt = new Option(fromSelect[i].text, fromSelect[i].value);
fromSelect.remove(i);
if (toSelect.length > 0)
{
for (var j = 0; j < toSelect.length; j++)
{
if (compare(opt.value, toSelect[j].value) < 0)
{
toSelect.add(opt, j);
continue outer;
}
}
}
toSelect.add(opt);
}
}
if (isNaN(parseInt(year, 10)) || isNaN(parseInt(month, 10)))
return;
var weeks = (!isLeapYear(year) && parseInt(month) == 2) ? 4 : 5;
for (var i = 1; i <= weeks; i++)
options.add(new Option("第" + i + "周", i));
}
//该方法将会寻找具有id和parent的属性的文本框,并对每种相同名字的所有文本框从最低层向上累加。
function initAddUp()
{
this.hasChild = function(texts, text)
{
for (var i = 0; i < texts.length; i++)
if (texts[i].parent == text.id)
return true;
return false;
}
this.hasSameParent = function(texts, text)
{
for (var i = 0; i < texts.length; i++)
if (texts[i].parent == text.parent)
return true;
return false;
}
this.getLastChilds = function(texts)
{
var lastChilds = new Array();
for (var i = 0; i < texts.length; i++)
if (!hasChild(texts, texts[i]) && !hasSameParent(lastChilds, texts[i]))
lastChilds.add(texts[i]);
return lastChilds;
}
var allText = document.getElementsByTagName("INPUT");
var textNames = new Array();
for (var i = 0; i < allText.length; i++)
{
if (allText[i].id && allText[i].parent && !textNames.contains(allText[i].name))
{
textNames.add(allText[i].name);
}
}
for (var i = 0; i < textNames.length; i++)
{
var texts = document.getElementsByName(textNames[i]);
var lastTexts = getLastChilds(texts);
for (var j = 0; j < lastTexts.length; j++)
addUp(lastTexts[j]);
}
}
/*
对文本框输入的数据累加到其所属的高层的文本框中。
要求该文本框必须有name、id和parent属性。
@param text 要累加的文本框
*/
function addUp(text)
{
this.text = text;
/*
根据 url 打开一个规定宽带和高度的新弹出窗口,新窗口将在屏幕中间稍微靠上显示,url中的参数可以从表单中获得。
@param url 打开新窗口的路径
@param name 窗口名称
@param width 窗口宽度
@param height 窗口高度
@param oForm 要获取参数的表单,可省略。
@return 返回打开窗口的对象
*/
function openWin(url, name, width, height, oForm)
{
if (oForm != undefined)
{
var params = "";
var len = oForm.elements.length;
for (var i = 0; i < len; i++)
{
with (oForm.elements[i])
{
switch (tagName)
{
case "SELECT":
params += "&" + getAttribute("name") + "=" + encodeString(value);
break;
case "INPUT" :
var type = getAttribute("type");
if (type == "text" || type == "hidden")
params += "&" + getAttribute("name") + "=" + encodeString(value);
break;
}
}
}
if (url.indexOf("?") == -1)
url += "?" + params.substr(1);
else url += params;
}
var left = (window.screen.width - width) / 2;
var top = (window.screen.height - height) / 2;
window.open(url, name, "width=" + width + ",height=" + height + ",top=" + top + ",left=" + left + ",resizable=yes,scrollbars=yes");
}
//对url中的特殊英文字符进行编码
function encodeString(str)
{
var s = "";
for (var i = 0; i < str.length; i++)
{
s += str.charCodeAt(i) <= 255 ? encodeURIComponent(str.charAt(i)) : str.charAt(i);
}
return s;
}
/*
写入HTML编码的英文字符空格。
@param num 写入的空格数。可省略,省略时,写入的空格长度与文本框的默认长度(18)相等。
*/
function writeSpaces(num)
{
var space = " ";
var repeats = num == undefined ? 18 : num;
document.write(repeatString(space, repeats));
}
/*
根据传入的字符串在其后面写入HTML编码的英文空格以使字符串和空格的长度大致等于文本框的默认长度。
@param str 字符串,可省略,省略时写入文本框默认长度的空格。
*/
function fillSpaces(str)
{
var totalLen = 18;
var strLen = str == undefined ? 0 : byteSize(str);
var spaceLen = totalLen - strLen;
var space = " ";
document.write(str + repeatString(space, spaceLen));
}