22 декабря 2015
27 июня 2008
7
Пятничные сниппеты. JavaScript, часть 2.
Продолжение серии сниппетов, которое сегодня посвящено JavaScript. Вы так же можете посмотреть предыдущие сниппеты по Javascript.
1. Определение положения курсора
function getPosition(e)
{
e = e || window.event;
var cursor = {x:0, y:0};
if (e.pageX || e.pageY)
{
cursor.x = e.pageX;
cursor.y = e.pageY;
}
else
{
cursor.x = e.clientX +
(document.documentElement.scrollLeft ||
document.body.scrollLeft) -
document.documentElement.clientLeft;
cursor.y = e.clientY +
(document.documentElement.scrollTop ||
document.body.scrollTop) -
document.documentElement.clientTop;
}
return cursor;
}
2. Попап окно, которое выводиться по центру экрана
nn4 = (document.layers) ? true : false;
ie4 = (document.all) ? true : false;
dom = (document.createTextNode)? true : false;
function popupWindow(fileUrl, winN, winWidth, winHeight, scrollB)
{
var winName = (winN)? winN : 'popupWin'
var scrollBars = (scrollB)? scrollB : 'auto'
if (nn4 || ie4 || dom)
{
if (screen.width < winWidth + 50) { winWidth = screen.width - 50; scrollbars = 'yes' }
if (screen.height < winHeight + 100) { winHeight = screen.height - 100; scrollbars = 'yes' }
posX = Math.round((screen.width - winWidth) / 2);
posY = Math.round((screen.height - winHeight) / 2);
posCode = (nn4)? "screenX="+posX+",screenY="+posY : "left="+posX+",top="+posY;
}
else
{
posCode = "";
}
var popupWin = window.open(fileUrl, winName,"menubar=no,
toolbar=no, scrollbars="+scrollB+", status=yes, resizable=no, width=" + winWidth + ",
height=" + winHeight + " ," + posCode);
if (popupWin) popupWin.focus();
}
3. Получение GET переменной по ее имени
function getUrlVar(name)
{
name = name.replace(/[[]/,"[").replace(/[]]/,"]");
var regexS = "[?&]"+name+"=([^&#]*)";
var regex = new RegExp( regexS );
var results = regex.exec( window.location.href );
if(results == null) return "";
else return results[1];
}
4. Получение ассоциативного массива GET переменных
function getUrlVars()
{
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
}
5. Универсальный валидатор форм
function checkForm(obj, elems)
{
var element, pattern;
for (var i = 0; i < obj.elements.length; i++)
{
// пробегаемся по всем элементам формы
element = obj.elements[i];
// Проверяем только нужные поля
if (elems != undefined)
if (elems.join().indexOf(element.type) < 0) continue;
// И только если есть чего говорить юзеру в случае ошибки
if (!element.getAttribute("check_message")) continue;
if (pattern = element.getAttribute("check_pattern"))
{
// если задан рег
pattern = new RegExp(pattern, "g");
if (!pattern.test(element.value))
{
alert("Пожалуйста, заполните правильно графу " + element.getAttribute("check_message"));
element.focus();
return false;
}
}
else if(/^s*$/.test(element.value))
{
// иначе просто проверка что поле не пустое
alert("Пожалуйста, заполните графу " + element.getAttribute("check_message"));
element.focus();
return false;
}
}
return true;
}
// пример использования
<form method="GET" action="script.htm" onSubmit="return checkForm(this)">
<input type="text" name="dummy"/>Не проверяется<br/>
<input type="text" name="name" check_message="Имя"/>Имя<br>
<input type="text" name="e-mail" check_pattern="^[w-]+(.[w-]+)*@([w-]+.)+[a-zA-Z]{2,7}$" check_message="Электронная почта"/>Электронная почта<br/>
<textarea name="message" check_message="Сообщение"></textarea><br>
<input type="submit" value="submit"/>
</form>