Я залогинился через «Google Account», перешёл в «Settings» (https://workmateapp.com/users/edit). Хочу поменять информацию в форме, а она не сохраняется, просит пароль (который я не заводил).
Должен ли я завести пароль от «Google Account»? :)
Если метод, переданный параметром к head.ready будет исполнен только после наступления dom ready, то вы конечно правы (двойная проверка будет излишней).
Исходя из своего опыта скажу, что асинхронная подгрузка скриптов действительно визуально ускоряет загрузку страницы, но:
Эффект действительно заметен только на старых браузерах и ie. В современных браузерах, при тестировании я нередко получал обратный эффект (правда очень мизерный).
Если у вас на странице контент, оформление которого зависит от скрипта (чего конечно в идеале нельзя допускать), например слайдер или меню, то при загрузке страница может на мгновение предстать в недооформленном виде.
$(function(){ }); и всякие подобные «документ реди», вызванные инлайн скриптом на загружаемой странице, перестают работать. Так как скрипты подгружаются асинхронно со страницей, то страница может загрузиться до полной загрузки всех скриптов и некоторые функции и переменные могут быть ещё не определены, что взовет ошибку. Надо вызов кода помещать в дополнительную колбек функцию. Например, в случае head.js:
Возможно автор тонкий тролль. Все же выскажу свое мнение:
Несмотря на var-ы, эта куча переменных в начале создается в глобальной области видимости. Таким образом все переменные и функции являются глобальными. Допустим автор написал другой подобный скрипт и там тоже есть переменная step. Вот тут то и собака зарыта.
Q: «Так называемые парадоксы автора, шокирующие читателя, находятся часто не в книге автора, а в голове читателя»
A: «Большинство из четырех лидеров»
Q: «Прозреть, что ты смертен — это значит познать начало ужаса; познать же неизбежность смерти — это значит положить конец ужасу»
A: «Вы увидите, — насилие — насилие, опасное для жизни Solaris.»
Q: «Тёмную сторону в тебе ощущаю я?»
A: «Как вы думаете, есть темная сторона?»
Существует множество скрипт лоадеров: LAB.js, head.js, yepnope.js. Последнтй позволяет подгружать скрипты при определенном условии: yepnope({
test : Modernizr.geolocation,
yep : 'normal.js',
nope : ['polyfill.js', 'wrapper.js']
});
Недавно он даже стал частью Modernizer.js
Думаю в некоторых ситуациях логично требовать реальный адрес эл. почты для верификации регистрирующегося пользователя (как мера проти фейк юзеров).
А вообще, надо действовать исходя из ситуации. Например, в одном проекте мы специально не сделали вход по email, чтобы пользователь вводя при каждом входе свой никнейм запомнил его, потому что на никнейм было много чего привязано…
Должен ли я завести пароль от «Google Account»? :)
Думаю, всё же $(function(){}); стоит оставить.
Исходя из своего опыта скажу, что асинхронная подгрузка скриптов действительно визуально ускоряет загрузку страницы, но:
Эффект действительно заметен только на старых браузерах и ie. В современных браузерах, при тестировании я нередко получал обратный эффект (правда очень мизерный).
Если у вас на странице контент, оформление которого зависит от скрипта (чего конечно в идеале нельзя допускать), например слайдер или меню, то при загрузке страница может на мгновение предстать в недооформленном виде.
$(function(){ }); и всякие подобные «документ реди», вызванные инлайн скриптом на загружаемой странице, перестают работать. Так как скрипты подгружаются асинхронно со страницей, то страница может загрузиться до полной загрузки всех скриптов и некоторые функции и переменные могут быть ещё не определены, что взовет ошибку. Надо вызов кода помещать в дополнительную колбек функцию. Например, в случае head.js:
Несмотря на var-ы, эта куча переменных в начале создается в глобальной области видимости. Таким образом все переменные и функции являются глобальными. Допустим автор написал другой подобный скрипт и там тоже есть переменная step. Вот тут то и собака зарыта.
Можно использовать структуру (Object Literal):
var myScroller = {
options: {
scrollerstep: 1,
...
lefttime: 0
},
runScroll: function() {
...
},
scroll_run: function() {
...
}
};
// Вызов
$(function(){
...
myScroller .scroll_run();
});
Или использовать Self Invoking Anonymouse Function:
var myScroller = (function(){
this.options = {
scrollerstep: 1,
...
lefttime: 0
};
this.runScroll = function() {
...
};
this.scroll_run = function() {
...
};
return this;
})();
// Вызов
$(function(){
...
myScroller .scroll_run();
});
A: «Большинство из четырех лидеров»
Q: «Прозреть, что ты смертен — это значит познать начало ужаса; познать же неизбежность смерти — это значит положить конец ужасу»
A: «Вы увидите, — насилие — насилие, опасное для жизни Solaris.»
Q: «Тёмную сторону в тебе ощущаю я?»
A: «Как вы думаете, есть темная сторона?»
(function($){
$.fn.extend({
labelPlaceHolder: function() {
return this.each(function() {
var $input = $(this), $label = $('label[for='+ $input.attr('id') +']');
if($input.val()) $label.hide();
$input.focus(function(){
$label.hide();
}).blur(function(){
if(!$input.val()) $label.show();
});
});
}
});
})(jQuery);
Пример использования:
$(function(){
$('#searchForm input:text, #loginForm .name input, #loginForm .pass input').labelPlaceHolder();
});
Осталось только в CSS position-absolute -ом label поместить поверх input
yepnope({
test : Modernizr.geolocation,
yep : 'normal.js',
nope : ['polyfill.js', 'wrapper.js']
});
Недавно он даже стал частью Modernizer.js
А вообще, надо действовать исходя из ситуации. Например, в одном проекте мы специально не сделали вход по email, чтобы пользователь вводя при каждом входе свой никнейм запомнил его, потому что на никнейм было много чего привязано…
лунапарклунаскрипт с блекджеком и шлюхами.В данном случае фреймворк ни при чем.
Существует много разных подходов и все они имеют право на жизнь (главное избегать спагетти-кода).