misc/class
lib/jquery_pnotify, lib/moment, lib/lodash, misc/notification, site/engine, misc/social
if( $.browser.msie && $.browser.version <= 8 ) include('lib/respond'); $._social.__cfg = {"init":[{"service":"basic"},{"fb_app_id":"1997094873850041","service":"fb"},{"vk_app_id":"2978320","service":"vk"},{"service":"twi"}],"like":[{"service":"fb"},{"service":"vk"},{"via":"","channel":"","hash_tag":"","service":"twi"}]}; window._SiteEngine = new classes.SiteEngine( { user_id: 0, controller: 'content_tape', action: 'view', content_css_version: '1459538664', social_enabled: 0} );

Faiwer

Блог web-программиста

onKeyDown для DIV

22 октября 2011

Эта маленькая заметка посвящена небольшому трюку, который позволяет добиться работоспособности события onkeydown для тега <div>. Дело в том, что код вроде:

$('#test').keydown( function(e){ console.log( e.keyCode ); } );

Не сработает для HTML аля <div id="test">test</div>, а всё потому, что <div> не может получить focus. Простое добавление аттрибута tabindex="0" проблему решает.

Внедрение CSS на лету

19 октября 2011

Столкнулся с задачей — внедрить "на лету", при помощи javascript, CSS-код на страницу. Простое решение "в лоб" не заработало в IE:

$('head').append( $( '<style>', { type: 'text/css' } ).html( 'css код' ) );
Оказалось, что IE ищет в теге <style> свойство styleSheet.cssText, откуда и берёт код. Решение:

var style = $('<style>', { type: 'text/css' } ).get(0);
if( style.styleSheet ) // IE
{
    style.styleSheet.cssText = css_code;
}
else
{
    $( style ).html( css_code );
}
$('head').append( style );

jQuery().ready

19 октября 2011

Многие используют $( document ).ready( fn ) или упрощённую запись $( fn ) для выполнения js-кода по окончанию загрузки DOM-модели страницы. Это удобно и кроссбраузерно, однако результат выполнения следующего кода:

<html>
    <head>
        <title>Test .ready</title>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"
            type="text/javascript"></script>
        <script>$( function() { error.error + 'error'; /* Error :) */ } ); </script>
        <script>
            $( function() { alert( 'All right' ); } );
            alert(2);
        </script>
    </head>
    <body> </body>
</html>

может вас разачаровать. Дело в том, что если одна из поставленных в очередь на .ready функций "заглючит", остальные не выполнятся. Вы не увидете 'All right', только '2'. Т.е. какой-либо мелочный глюк в одном модуле может привести к полной неработоспособности javascript-а на странице.

Потерянный $_POST

14 октября 2011

Внедряя на crew.kz робокассу, я столкнулся с тем, что в реальных, боевых условиях, на сервер приходят "не правильные ответы" от платёжного сервиса. Дело в том, что $_POST был пуст, в то время как настройки мерчанта были указаны правильные. Проблема оказалась проста — в настройках аккаунта я указал в качестве адреса http://crewative.ru, а не http://www.crewative.ru, что приводило к 301-редиректу и потери POST-данных. Такая вот мелкая оплошность, может стоить нескольких часов поиска :)

For in в JavaScript

14 октября 2011

Встраивая jQuery-дерево (dynatree) на сайт, я столкнулся с 1 нюансом javascript-а, который, возможно, вам ещё не попадался. Оказывается конструкция for [key] in [object] в разных браузерах работает по разному:

a = { 5:5, 3:3, 8:8, 12:12 };
for( var name in a )
{
    console.log( name );
}
Результат выполнения:

  • Opera 12, Google Chrome: 3 5 8 12 // сортировка по алфавиту
  • Firefox: 5 3 8 12 // полное соответствие

Пришлось переписать часть кода :)