function myFunc(collback) {
// делаем что то
setTimeout(function() {
// эмуляция запроса на сервер
var response = "Вася Пупкин не авторизован";
// потом вызываем коллбек
collback(response);
}, 2000);
}
// используем так
myFunc(function(resp) {
// выполняется после того, как отработает myFunc()
console.log("Ответ от сервера: ", resp);
});
// Еще можно так
function MyPromise() {}
MyPromise.prototype.done = function(collback) {
if (typeof collback == "function") {
this.collback = collback;
} else {
this.collback.apply(this, arguments);
}
}
function myAnotherFunc() {
var promise = new MyPromise();
// делаем что то
setTimeout(function() {
// эмуляция запроса на сервер
var response = "Вася Пупкин уже авторизован";
// потом вызываем коллбек
promise.done(response);
}, 4000);
return promise;
}
// используем так
myAnotherFunc().done(function(resp) {
// выполняется после того, как отработает myFunc()
console.log("Ответ от сервера: ", resp);
});
// выбираем нужный элемент
var target = document.querySelector('#some-id');
// создаем новый экземпляр наблюдателя
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
console.log(mutation.type);
});
});
// создаем конфигурации для наблюдателя
var config = { attributes: true, childList: true, characterData: true };
// запускаем механизм наблюдения
observer.observe(target, config);
// позже, если надо, прекращаем наблюдение
observer.disconnect();
<form id="myForm">
<input type="text" name="login" placeholder="Login">
<input type="password" name="password" placeholder="Password">
<button type="submit">Отправить</button>
</form>
document.querySelector("#myForm").addEventListener("submit", function(e) {
var data = {}, inputs = this.querySelectorAll("input[name]")
e.preventDefault()
for (var i = 0, length = inputs.length; i < length; i++) {
data[inputs[i].name] = inputs[i].value
}
// auth.php - куда слать данные
ajax("auth.php", data, function(resp) {
// resp - ответ от сервера
alert(resp)
})
});
function ajax(url, data, onsuccess, onerror) {
var request = new XMLHttpRequest()
request.open('GET', url + data && query(data) || '', true)
request.onload = function() {
if (request.status >= 200 && request.status < 400) onsuccess && onsuccess(request.responseText)
else onerror && onerror()
};
request.onerror = onerror || function() {}
request.send()
}
function query(obj) {
var str = "";
for (var prop in obj) {
str && (str += "&") || (str = "?");
if (obj.hasOwnProperty(prop)) str += prop + "=" + obj[prop];
}
return str;
}
<div class="my_element">
<input name="one">
<input name="two">
</div>
<input name="three">
function getNames(selector) {
var names = [];
$(selector).find('[name]').each(function() {
names.push(this.name);
});
return names;
}
var names = getNames('.my_element');
console.log(names); // ['one', 'two']
function Mobile(newConfigure) {
this.callbacks = []
this.functions = {mobile: null, desktop: null};
}
Mobile.prototype.dispatcher = function(el, ev, dlg, cb) {
this.callbacks.push({ el: el, ev: ev});
return $(el).on(ev, dlg, cb);
}
Mobile.prototype.removeListeners = function() {
for (var i = 0, ln = this.callbacks.length; i < ln; i++ ) {
$(this.callbacks[i].el).off(this.callbacks[i].ev);
}
this.callbacks = [];
}
Mobile.prototype.run = function(params) {
//Здесь какое-либо условие
this.removeListeners();
if (условие) {
params.mobile(this.dispatcher);
} else {
params.desktop(this.dispatcher);
}
}
var mobile = new Mobile({
mobile: function(on) {
on('#myButton', 'click', function(e) { /* */ });
},
desktop: function(on) {
on('#myButton', 'click', function(e) { /* */ });
}
})
mobile.run();
<script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/sha1.js"></script>
<input type="text" id="in">
<input type="text" id="out">
function handler() {
document.querySelector('#out').value = CryptoJS.SHA1(this.value);
}
var input = document.querySelector('#in');
input.addEventListener('keyup', handler);
input.addEventListener('change', handler);
function encodeHtmlEntities(str) {
return String(str)
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''')
.replace(/\\/g, '\')
.replace(/\//g, '/');
};
function decodeHtmlEntities(str) {
return String(str)
.replace(/&/g, '&')
.replace(/</g, '<')
.replace(/>/g, '>')
.replace(/"/g, '"')
.replace(/'/g, '\'')
.replace(/\/g, '\\')
.replace(///g, '/');
};
var str = '<script src="test.com">\\Lorem Ipsu\'m</script>';
str = encodeHtmlEntities(str);
console.log(str); // <script src="test.com">\Lorem Ipsu'm</script>
str = decodeHtmlEntities(str);
console.log(str); // <script src="test.com">\Lorem Ipsu'm</script>
var foo = (function() { /* */ });
function foo () { /* */ }
var regx = {
name: /^[a-zа-я -]{3,}$/i,
pass: /\S{8,}/,
mail: /^([\w\d_.-]){3,}@([\w\d_.-])+\.[\w]{2,5}$/
}
function signup() {
var el_name = $("#name"),
el_lname = $("#last-name"),
el_pass = $("#password"),
el_mail = $("#mail"),
data = {
name: el_name.val(),
lastname: el_lname.val(),
psw: el_pass.val(),
login: el_mail.val()
};
el_name.removeClass('error');
if (!regx.name.test(data.name)) {
return el_name.addClass('error');
}
el_lname.removeClass('error');
if (!regx.name.test(data.lname)) {
return el_lname.addClass('error');
}
el_pass.removeClass('error');
if (!regx.pass.test(data.psw)) {
return el_pass.addClass('error');
}
el_mail.removeClass('error');
$(".r-f-pp-l .p-att").text('');
if (!regx.mail.test(data.login)) {
$(".r-f-pp-l .p-att").text('Пожалуйста, заполните поле email правильно. Пример: myemail@mail.ru');
return el_mail.addClass('error');
}
$.post('site/singup', data, function(resp) {
alert('successful : ' + resp);
});
}