Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Search found 54 matches
Author Message
  Topic: Как проверить поддержку события "DOMMouseScroll"?
Denis Usenko

Replies: 0
Views: 6735

PostForum: Разное :: JavaScript   Posted: Sun Nov 08, 2009 1:25 am   Subject: Как проверить поддержку события "DOMMouseScroll"?
Понадобилось добавить поддержку колеса мыши в старый код обеспечивающий установку EventHandlers. Никак не могу найти способ выяснить поддерживает ли браузер событие "DOMMouseScroll". Проверять ЮА на предметт соответствия FF кажется плохой идеей.
На всякий случай привожу код, может проблему можно решить как-то иначе.

/*
Установка обработчиков событий.

windows.addEH(node, type, handler) -- повесить обработчик
windows.delEH(node, type, handler) -- снять обработчик

В MSIE обработчик получает аргумент event дополненный следующими методами и свойствами:

event.preventDefault
event.stopPropagation

event.pageX
event.pageY
event.relatedTarget
event.which

Во всех браузерах:

метод stop объекта Event выполняет методы preventDefault и stopPropagation
свойство isWheelDown возвращает направление колеса мыши (true -- колесо на себя, false -- от себя)
*/

&# ...
  Topic: innerHTML vs DOM
Denis Usenko

Replies: 8
Views: 8958

PostForum: Разное :: JavaScript   Posted: Wed Jul 08, 2009 10:02 am   Subject: innerHTML vs DOM
Если Вы не работаете с xhtml, то все будет в порядке. А так, используйте то, что больше подходит в каждой ситуации. Большие куски html кода в javascript уродуют код, ухудшают читаемость и т.д. Но в любом случае полностью отказываться от него глупо и сложновыполнимо. Иногда можно использовать подобный подход:

function JSON2DOM(r){

var k, v, t, p, e, i = 0, d = document;

if(typeof r != 'object') return d.createTextNode(String(r));

e = d.createElement(r.tag || r._);

if(e) for(k in r) {
v = r[k];
t = typeof v;
switch(k.toLowerCase()) {
case 'tag' : case '_' : break;
case 'text' : case 't' : e.appendChild( d.createTextNode(v) ); break;
case 'style' : case 's' : for(p in v) e.style[p] = v[p]; break;
case 'class' ...
  Topic: Сравнение производительности методов сортировки массивов объектов.
Denis Usenko

Replies: 1
Views: 6718

PostForum: Разное :: JavaScript   Posted: Tue Jul 07, 2009 9:55 am   Subject: Сравнение производительности методов сортировки массивов объектов.
Поставил сегдня FF 3.5, лиса порадовала хорошей производительностью, сортировка в ней теперь быстрее чем в опере. Но интересно другое, если раньше самой быстрой была нативная с колбеком, то теперь некоторые самописные варианты быстрее.
Вот результат сортировки массива в 15000 элементов:


array.sort(function (a, b) { return a.someProperty - b.someProperty; })
time: 167

array.sortCool10a(someProperty)
time: 118

array.sortCool10b(someProperty)
time: 113

array.sortHook36(someProperty)
time: 65

array.sortHook10(someProperty)
time: 46

array.sortIr(someProperty)
time: 106

array.heapSortByProp(someProperty)
time: 124

Впрочем удивляться нечему: самой быстрой сортировкой с колбеком раньше была сортировка в хроме, а ведь ее реализация написана на самой javascript )) Если вдруг кто захочет поэксперементировать с ее кодом:
<pre><script>document.write&# ...
  Topic: Создание фрагмента DOM из HTML
Denis Usenko

Replies: 3
Views: 12428

PostForum: Склад готовых решений :: JavaScript   Posted: Thu Jul 02, 2009 7:40 am   Subject: Создание фрагмента DOM из HTML
Только это, почему не в складе?
Ну пока это эксперимент, надо чтоб отлежалось )), и да я забыл написать: надеюсь может кто что дельное подскажет насчет msie (не нравится мне способ с outerHTML)?
  Topic: Создание фрагмента DOM из HTML
Denis Usenko

Replies: 3
Views: 12428

PostForum: Склад готовых решений :: JavaScript   Posted: Thu Jul 02, 2009 4:45 am   Subject: Создание фрагмента DOM из HTML
Часто нужно создавать куски DOM из строкового html, т.е. делать что-то примерно следующее:


function html2dom (html) {
var el = document.createElement('span');
el.innerHTML = html;
return el
};


я до недавних пор использовал схожий код, но лишний оборачивающий span часто мешает, а в идеале хочется получать что-то вроде DocumentFragment. Можно конечно пробежать по непосредственным потомкам элемента добавляя их в DOM-фрагмент:


var wrapper = document.createElement('span');
wrapper.innerHTML = html;
var node = wrapper.firstChild, container = document.createDocumentFragment();
while(node) {
container.appendChild(node);
node = node.nextSibling;
};
return container;


Но лишних телодвижений во время работы не очень хочется. Решил попочитать спеки и погуглить на предмет DocumentFragment, какие функи его возвращают.
Для "правильных" браузеров решен ...
  Topic: ? Создание индикатора состояния канала связи между браузером и сервером на JsHTTPReqest
Denis Usenko

Replies: 4
Views: 5970

PostForum: JsHttpRequest :: JavaScript   Posted: Tue Mar 03, 2009 8:39 pm   Subject: ? Создание индикатора состояния канала связи между браузером и сервером на JsHTTPReqest
Константин И.П.
Может вот это поможет?
http://javascript.ru/ajax
http://javascript.ru/ajax/server-push
http://javascript.ru/ajax/transport
  Topic: Время до события
Denis Usenko

Replies: 11
Views: 12007

PostForum: Разное :: JavaScript   Posted: Tue Mar 03, 2009 6:41 pm   Subject: Время до события
Бросте, Вы не ответили на вопрос автора темы:
Тестировал только в Опере. Она выдает ошибку Типы не совпадают. Как исправить данную ошибку?
или ответили неверно:
но проблема по-моему в том, что операция - для объектов Date не определена
оперция минус (-) определена для Number, и в контексте таких вычислений обращение к дате даст число. С точки зрения javascript это имеет совершенно определенный смысл.
Мне-то даже понятно почему у меня получилось именно 20 часов :),
О как! Поздравляю.
но в Вашем примере с умножением миллисекунд на 1000 вычисления вообще теряют всякий смысл а результат связь с реальностью.
1000 секунд -- это из кода топикстартера. Я не знаю что Вас так возмущает -- в предыдущем сообщении я объяснил почему выдается такой результат, и согласился с Вами относительно того как надо считать разницу в датах. И это не отменяет того факта что вычитание дат имеет место быть в программировании на javascript и имеет совершенно однозначный смысл -- это разница между этими дат ...
  Topic: Время до события
Denis Usenko

Replies: 11
Views: 12007

PostForum: Разное :: JavaScript   Posted: Tue Mar 03, 2009 4:41 am   Subject: Время до события
dimagolov
Если учесть что результат арифметических манипуляций над миллисекундами от начала эпохи ничего другого как миллисекунды от начала эпохи дать не может, то результат кажется мне абсолютно верным ))
Прибавьте к первому января 1970 года количество миллисекунд прошедших с 15 Апреля 2009 года по 15 Июля 2009 года, и Вы закономерно получите тот результат который выводит алерт.
Конечно это шутка, и Вы правы, что в данном случае надо действовать иначе. Но часто очень удобно считать в таком стиле:
(new Date(this.getTime() + (3 - (this.getDay() + 6) % 7) * 864e5)).getFullYear()
ЗЫ. Работа с датами, это таки да, опа то еще ))
  Topic: Чем обжимать код?
Denis Usenko

Replies: 7
Views: 8544

PostForum: Разное :: JavaScript   Posted: Mon Mar 02, 2009 1:00 pm   Subject: Чем обжимать код?
Единственный недостаток, создает глобальные переменные: J, O, o, Q;
А обернуть все это дело функцией?
  Topic: Время до события
Denis Usenko

Replies: 11
Views: 12007

PostForum: Разное :: JavaScript   Posted: Mon Mar 02, 2009 6:09 am   Subject: Время до события
Rumata
+ new Date -- вернет миллисекунды с начала эпохи. Тоесть:
+ new Date == (new Date).getTime()
Соответственно:

date1 = new Date(timestamp1)
date2 = new Date(timestamp2)
difference = new Date(date2 - date2)



Костик+
У Вас во второй строке data_end1 не определена здесь. В третьей строке date должна быть датой:


var date_now = new Date();
var date_end = new Date(date_now * 1000); // data_end1 заменил на date_now
var date = new Date(date_end - date_now); // date должна быть строкой
var date_to_write = '';

function getDataToEnd()
{
date_to_write = (
date.getYear().toString() + " " +
date.getMonth().toString() + " " +
date.getDate().toString() + " " +
date.getHours().toString() + " ...
  Topic: Можно воды попить? А то так есть хочется, что переночевать негде!
Denis Usenko

Replies: 10
Views: 12577

PostForum: Прочее   Posted: Sun Mar 01, 2009 2:14 pm   Subject: Можно воды попить? А то так есть хочется, что переночевать негде!
Я занимаюсь разработкой альтернативной оболочки для ОС всех мастей на базе PHP-MySQL-HTML
А можно подробнее -- что за задача стоит перед Вами?
PS.
Если бы мне хотелось переносимо и очень экономно в плане ресурсов, я бы с удовольствием бы попробовал повозиться с lua+xavante.
  Topic: onMouseDown - вызывающий объект
Denis Usenko

Replies: 21
Views: 17867

PostForum: Разное :: JavaScript   Posted: Sun Mar 01, 2009 7:37 am   Subject: onMouseDown - вызывающий объект
Shira
Упс, просмотрел обновление темы, хоть и заглядывал на форум.
На второй вопрос Вам подробно ответили, а по первому:
Denis Usenko, просто либо я не знаю что такое утечки, либо вообще не понимаю..... зачем следать, что может произойти?
держите ссылков:
http://www.codeproject.com/KB/scripting/leakpatterns.aspx
http://web-log.ru/?p=21
http://webo.in/articles/habrahabr/24-memory-leaks-detection-tools/
http://webo.in/articles/habrahabr/18-solving-internet-explorer-memory-leaks/

Существует еще один способ выполнять обработчики в ие так чтобы this указывал на нод, а сами они получали объект Event как аргумент:

function addEvent(element, type, handler) {
element.attachEvent('on'+type, function () {
handler.call(element, fixEvent(window.event))
})
};
Но тут по определению никак не избежать утeчки, так как нод попадает в замыкание. Так вот, исправляя свою поспешную фразу за ДжиКвери. В jQuery испол ...
  Topic: onChange в FireFox
Denis Usenko

Replies: 7
Views: 7664

PostForum: Разное :: JavaScript   Posted: Sat Feb 28, 2009 10:09 am   Subject: onChange в FireFox
_sam_
Вы вот это имели ввиду? :

function showIndex(name)
{
var select = document.getElementsByName(name)[0],
al = select.options[select.selectedIndex].value;
alert(al);
}
  Topic: Сериализация объектов (совместимая с eval) [обсуждение]
Denis Usenko

Replies: 23
Views: 37376

PostForum: Разное :: JavaScript   Posted: Wed Feb 25, 2009 8:25 pm   Subject: Сериализация объектов (совместимая с eval) [обсуждение]
Внес пару изменений, поправил свой предыдущий пост.
  Topic: Сериализация объектов (совместимая с eval) [обсуждение]
Denis Usenko

Replies: 23
Views: 37376

PostForum: Разное :: JavaScript   Posted: Tue Feb 24, 2009 1:33 pm   Subject: Сериализация объектов (совместимая с eval) [обсуждение]
Александр Михалицын, да мне очень понравилось смотреть дамп Вашим вариантом с отступами ))
Поэтому поковырял еще немного функу, добавил возможность html-эскейпить вывод, и параметр максимальной глубины, для дампа нативных объектов, типа winodw, event и т.д. Всяческие фишечки и идеи всяческих фишечек приветствуются.


(function (arr, str) {

arr.indexOf || (arr.indexOf = function (v, start) {
for(var i = start < 0 ? this.length + start : start || 0, l = this.length; i < l; i++)
if(v === this[i]) return i;
return -1
});

str.x = function (n) {
// Подсмотрено у WingedFox'а, спасибо ему за это :-)
return Array(n > 0 ? n + 1 : 0).join(this)
};

var _e = document.createElement('pre');

str.toHTML = function () {
_e.innerHTML = '*';
_e.firstChild.no ...
  Topic: onMouseDown - вызывающий объект
Denis Usenko

Replies: 21
Views: 17867

PostForum: Разное :: JavaScript   Posted: Tue Feb 24, 2009 5:27 am   Subject: onMouseDown - вызывающий объект
Shira
Нды, насчет утечек при присваивании обработчиков, -- я похоже просто повторяю читанную в интернетах ерунду )) С ними в любом случае проблемы, хоть с attachEvent, хоть присваиванием, а следить за этим надо.
  Topic: onMouseDown - вызывающий объект
Denis Usenko

Replies: 21
Views: 17867

PostForum: Разное :: JavaScript   Posted: Tue Feb 24, 2009 4:51 am   Subject: onMouseDown - вызывающий объект
Обычно говорят о двух недостатках -- нельзя повесить более одного обработчика, и сложность с утечками в ие. Сейчас проверил, onload = function () {
var list = document.getElementsByTagName('td');
for(var i = 0, l = list.length; i < l; i++) {
list[i]['onclick'] = function () {
document.getElementById("debug-display").firstChild.nodeValue = this.innerHTML
return false
}

}
}
То есть такой подход можно юзать, но придется все время контролировать код на memleak в ие. Поэтому для нормальной работы надо или юзать готовую либу (например ту что предложил WingedFox) или посмотреть как делается это в других либах и написать свою.

PS. Извиняюсь, напраслину возвел на великого гуру )) Утечек в примере от джона нет, это я так его заюзал ))
  Topic: onMouseDown - вызывающий объект
Denis Usenko

Replies: 21
Views: 17867

PostForum: Разное :: JavaScript   Posted: Mon Feb 23, 2009 11:23 pm   Subject: onMouseDown - вызывающий объект
Александр Михалицын
это вешать обработчик напрямую:
node.onmousedown = function () {}
тогда в ИЕ this будет указывать куда надо. ,
this указывает на объект для которого установлен текущий обработчик и при addEventListener, а вот при attachEvent (в IE) -- нет.
О чем и речь, вроде общеизвестный факт )). Если скрипт маленький и простой, можно юзать прямое присваивание обработчиков, если что-то более серьезное -- юзать один из фреймворков (их намного больше чем два общеизвестных :-)), либо писать свою работы с событиями.
(typeof this.tagName === "undefined").
Точнее ((this === window) == true) :-)

Shira

Блин, но если такой вариант использовать в firefox, то когда функция-обработчик возвращает false, то firefox все равно продолжает обработку события. Т.е. если кликаю на ссылку в ячейке(а обработка события повешана на ячейку), то он и функцию запускает и совершает клик на ссылку. Есть лекарство?
Причем в firefox не помогает ни event.preventDefault(), ни event.stopPropagatio ...
  Topic: onMouseDown - вызывающий объект
Denis Usenko

Replies: 21
Views: 17867

PostForum: Разное :: JavaScript   Posted: Mon Feb 23, 2009 12:40 am   Subject: onMouseDown - вызывающий объект
Shira, есть простой но нерекомендуемый способ -- это вешать обработчик напрямую:
node.onmousedown = function () {}
тогда в ИЕ this будет указывать куда надо. Если нужна возможность вешать любое количество обработчиков, то используйте какой-либо фреймворк либо пишите свой. Можно глянуть на этот код (из книжки Джона):
Листинг 6.15. Библиотека addEvent/removeEvent, созданная Дином Эдвардсом


// addEvent/removeEvent written by Dean Edwards, 2005
// with input from Tino Zijdel
// http://dean.edwards.name/weblog/2005/10/add-event/

function addEvent(element, type, handler) {
// присвоение каждому обработчику события уникального ID
if (!handler.$$guid) handler.$$guid = addEvent.guid++;

// создание хэш-таблицы видов событий для элемента
if (!element.events) element.events = {};

// создание хэш-таблицы обработчиков событий для каждой пары
// элемент-событие
var handlers = element.events[ ...
  Topic: Определение типа браузера [обсуждение]
Denis Usenko

Replies: 14
Views: 16999

PostForum: Разное :: JavaScript   Posted: Thu Feb 05, 2009 8:51 am   Subject: Определение типа браузера [обсуждение]
Лучше вообще не определять браузер ))
  Topic: Сериализация объектов (совместимая с eval) [обсуждение]
Denis Usenko

Replies: 23
Views: 37376

PostForum: Разное :: JavaScript   Posted: Thu Feb 05, 2009 8:16 am   Subject: Сериализация объектов (совместимая с eval) [обсуждение]
Александр Михалицын, может эталон и громкое слово, но ничего более эталонного пока вроде нет )) Я тоже не юзаю ФФ как основной браузер, но каким местом от должно быть связано с разработкой? toSource -- стандартная функция экма-скрипт, и можно надеятся что она таки будет реализована во всех основных движках. (да, и выше описка, должно быть toSource))
Я вот вашу функцию воспринимаю именно как средство отладки (а значит аккуратного вывода элементов) + как средство сериализации...
И очень хорошо, для этого код и выкладывается, я не против любого его использования. Но все таки мне думается, что дебаг вывод и сериализация немного разные вещи.

PS. Сейчас только заметил -- функа объявлена без var, поправил. И конечно в предыдущем посту я имел ввиду toSource ))
  Topic: Сериализация объектов (совместимая с eval) [обсуждение]
Denis Usenko

Replies: 23
Views: 37376

PostForum: Разное :: JavaScript   Posted: Wed Feb 04, 2009 8:40 am   Subject: Сериализация объектов (совместимая с eval) [обсуждение]
Александр Михалицын, по пунктам:
1) оформление кода лесенкой -- этого не делает ФФокс, это не нужно для сохранениея данных в куках, window.name и всяческих сторэйджах. Для того чтобы "просто посмотреть" юзаю совсем простую функу, но Ваш вариант пожалуй возьму на вооружение ))
2) юзер-свойства объектов-массивов, объектов-строк (var str = new String) и прочих не наблюдаются в выводе toSource ФФох'а. А значит и мы не будем ))

Функа по возможности старается имитировать поведение нативной toSource.
Например, можно было бы сериализовать так чтобы при eval восстанавливались все цикличиские ссылки, но Ффокс сериализует так что при таком eval будет exception, поэтому и здесь сделано так же.

правка: (toSource естественно, а не (toLiteral)
  Topic: div и автоскроллинг
Denis Usenko

Replies: 4
Views: 9977

PostForum: Разное :: JavaScript   Posted: Thu Jan 22, 2009 7:05 am   Subject: div и автоскроллинг
fanom_
как сделать чтобы скролл автоматически опускался?
С Вашей разметкой:

<div style="width:60%; height:400px;overflow: auto; " id="chat">
здесь сообщения чата
второе
третее
</div>

Это делается так:

var div = document.getElementById('chat')
div.scrollTop = div.scrollHeight;
  Topic: Запрет выделения текста и изображений на javascript
Denis Usenko

Replies: 77
Views: 101510

PostForum: Разное :: JavaScript   Posted: Wed Jan 14, 2009 11:03 am   Subject: Запрет выделения текста и изображений на javascript
WingedFox,
Если бы это был гипотетический "-msie-user-select: expression( посчитать и вернуть )" -- то тогда да, смысла бы не было. А здесь behavior используется чтобы повесить обработчик onselectstart на нужный элемент, после чего класс в стилях и элемент уже никак не связаны, то есть если элемент лишить класса, обработчик останется висеть.
Причем каждый раз при установке класса оonselectstart будет устанавливаться заново, а если бы не было удаления "this.style.behavior = null", то и при каждом reflow.

Вот пример, можно пощелкать, попереключать классы в браузере:

<style type="text/css">
.us1 {
behavior: expression(
(
this.onselectstart = function() {
return (/^(?:INPUT|TEXTAREA)$/).test( event.srcElement.tagName ) ?
event.cancelBubble = true :
(' ' + this.className + ' ').indexOf(' us1 ') < 0
...
  Topic: Запрет выделения текста и изображений на javascript
Denis Usenko

Replies: 77
Views: 101510

PostForum: Разное :: JavaScript   Posted: Wed Jan 14, 2009 7:54 am   Subject: Запрет выделения текста и изображений на javascript
Нашел решение: http://forum.mozilla-russia.org/viewtopic.php?pid=103584
Все возможные рабочие значения для -moz-user-select:

none
text
element
elements
all
toggle
tri-state
auto // internal value - please use nsFrame::IsSelectable()
-moz-all // force selection of all children, unless an ancestor has NONE set - bug 48096
-moz-none // Like NONE, but doesn't change selection behavior for descendants whose user-select is not AUTO.
Забавно, но здесь нет указанного в доках normal ))
Соответственно стили будут такими:

.unselectable {
-moz-user-select: -moz-none; /* Mozilla Firefox */
-khtml-user-select: none; /* Konqueror, Safary, Chrome. Останется ли поддержка в будущем ? */
-webkit-user-select: none; /* Safary, Chrome */
user-select: none; /* CSS3 -- на будущее */
behavior: expression( /* MSIE perversion */
(
this.onselectstart = function&# ...
  Topic: Сериализация объектов (совместимая с eval) [обсуждение]
Denis Usenko

Replies: 23
Views: 37376

PostForum: Разное :: JavaScript   Posted: Wed Jan 14, 2009 3:46 am   Subject: Сериализация объектов (совместимая с eval) [обсуждение]
А где unserialize? И чем JSON не нравится?
Есть хорошее правило -- можешь не писать код -- не пиши ))
toSource -- это ровно то, что мне надо, а поскольку рано или поздно все браузеры (или почти все) будут поддерживать toSource, я с удовольствием потру большую часть кода toLiteral )). А unserialize -- это eval ))

А что не в Складе тема?
Ну, на всякий, вдруг будет обсуждение. Можно второй пост туда скопировать.
  Topic: Сериализация объектов (совместимая с eval)
Denis Usenko

Replies: 2
Views: 12202

PostForum: Склад готовых решений :: JavaScript   Posted: Tue Jan 13, 2009 6:17 am   Subject: Сериализация объектов (совместимая с eval)
Неверно сериализовались объекты с конструктором отличным от Object (например new (function(){}))
Ключи всегда надо брать в кавычки, мсие очень капризный.
Добавлена проверка на циклические ссылки, для этого надо указать второй параметр (любое значение приводимое к true). Однако в деле может быть проще брать вызов serialize в try/catch.
Для работы требуется поддержка indexOf у Array.
Функа конечно отличается от Firefox'ного toSource, но вполне годится для тех задач для которых создана (сериализовать простой объект для сохранения в куках/сторэджах или для посылки аяксом)

var serialize = Object.prototype.toSource ?

function (val) {
return val.toSource()
} :

function (val, detCR) {

var rgstr = [], esc = {'\b':'b','\f':'f','\n':'n','\r':'r','\t':'t'};

var cnv = function (val) {

if( detCR && typeof val == 'object' ) {
if ...
  Topic: Запрет выделения текста и изображений на javascript
Denis Usenko

Replies: 77
Views: 101510

PostForum: Разное :: JavaScript   Posted: Mon Jan 12, 2009 4:00 pm   Subject: Запрет выделения текста и изображений на javascript
Неплохо бы добавить возможность выделять текст в input'ах и textarea. В presto и khtml/webkit ничего делать не надо, они сами умные, в msie добавляем проверок, а вот с Фоксом не получается сладить, "-moz-user-select: normal !important;" он не понимает (( Как побороть ?


<style type="text/css">
.unselectable {
-moz-user-select: none; /* Mozilla Firefox */
-khtml-user-select: none; /* Konqueror, Safary, Chrome. Останется ли поддержка в будущем ? */
-webkit-user-select: none; /* Safary, Chrome */
user-select: none; /* CSS3 -- на будущее */
behavior: expression( /* MSIE perversion */
(
this.onselectstart = function() {
return (/^(?:INPUT|TEXTAREA)$/).test( event.srcElement.tagName ) ?
event.cancelBubble = true : /* Оставить в покое input и textarea */
(' ' + this ...
  Topic: Запрет выделения текста и изображений на javascript
Denis Usenko

Replies: 77
Views: 101510

PostForum: Разное :: JavaScript   Posted: Mon Jan 12, 2009 12:30 am   Subject: Запрет выделения текста и изображений на javascript
Danilka, не очень-то удобно для текстовых нодов в верстке. Тогда уж так:

*[unselectable="on"]{
-moz-user-select: none;
-webkit-user-select: none;
-khtml-user-select: none;
}

*[unselectable="on"]::selection { color: inherit }


и управлять в js:

htmlElement.setAttribute('unselectable','off')
htmlElement.setAttribute('unselectable','on')

В реальном проекте не очень сложно записать rules'ы в styleSheets document'а. Это, имхо, наиболее кроссбраузерно.

ЗЫ.
Ах-ты черт, забыл про особенность этого unselectable не распространять действие на дочерние узлы )-: Все приходится делать через оное место.
<style type="text/css">

.unselectable {
-moz-user-select: none; /* Mozilla Firefox */
-khtml-user-select: none; /* Konqueror, Safary, Chrome. Останется ли поддержка в будущем ? */
-webkit-user-select: none; /* Sa ...
  Topic: Запрет выделения текста и изображений на javascript
Denis Usenko

Replies: 77
Views: 101510

PostForum: Разное :: JavaScript   Posted: Tue Jan 06, 2009 3:48 pm   Subject: Запрет выделения текста и изображений на javascript
Таки, сладить с оперой можно через псевдо-элемент "::selection". Он правда ничего не запрещает, но позволяет управлять внешним видом выделения

.no-select{
/* запрет выделения для мозиллы и сафари */
-moz-user-select: none;
-webkit-user-select: none;
}

/* CSS3. В опере пока запретить выделения нельзя но можно убрать визуальный эффект. */
.no-select::selection { color: inherit }
  Topic: Сравнение производительности методов сортировки массивов объектов.
Denis Usenko

Replies: 1
Views: 6718

PostForum: Разное :: JavaScript   Posted: Mon Sep 15, 2008 11:30 pm   Subject: Сравнение производительности методов сортировки массивов объектов.
Частая проблема сортироки с коллбэком -- медленная работа в msiях.
Когда-то давно Russel Lindsay предложил временно (на время сортировки) перекрывать методы toString объектов, а поскольку в ие приведение объектов к строке происходит до начала сортировки, то и работает метод на ура. Правда только в ИЕ, остальные браузеры выполнят n log n преобразований (вызовов нашего toString). Затем скрипт был улучшен Kostik'ом Naumov'ым (www.piterpen.net), ну и я немного повозился с этой методой )) В аттаче скрипт бенчмарка таких сортировок, можете написать свой вариант и затестить. Также, в архиве, описание (от дядьки Дж. Бентли) алгоритма хипсорт, это еще один хороший способ сортировать быстро в любых браузерах.
  Topic: Сериализация объектов (совместимая с eval) [обсуждение]
Denis Usenko

Replies: 23
Views: 37376

PostForum: Разное :: JavaScript   Posted: Mon Sep 15, 2008 10:31 pm   Subject: Сериализация объектов (совместимая с eval) [обсуждение]
Это старая версия кода, новая


Собственно код:

toLiteral = Object.prototype.toSource ?

function (val) {
return val.toSource()
} :

function (val) {
var esc = {'"' : '\\"', '\\': '\\\\', '\/': '\/', '\b': '\\b', '\f': '\\f', '\n': '\\n', '\r': '\\r'};
var cnv = function (val) {
switch (val.constructor) {
case String:
//return '"' + val.replace(/["\\\/\b\f\n\r]/g, function(a){ return esc[a] }) + '"';
return '"' + val.replace(/[\x22\\\/\b\f\n\r]/g, function(a){ return esc[a] }) + '"';
case Array:
var a = [], i = val.length;
while(i--) a[i] = cnv(val[i]);
return '[' + a.join(',') + ']' ...
  Topic: Статичный файл в качестве бэкэнда
Denis Usenko

Replies: 0
Views: 3863

PostForum: JsHttpRequest :: JavaScript   Posted: Thu Jul 24, 2008 2:36 pm   Subject: Статичный файл в качестве бэкэнда
Во первых, спасибо, Вам, Дмитрий, за ваш труд )).
У меня вопрос-потребность в хорошем совете, к Вам или к любому кто неплохо знает внутренности библиотеки.
Есть сервис где требуется синхронизация клиента с сервером; изменения на сервере, которые могут быть интересны клиенту, происходят относительно редко, но клиентов может быть много, и есть возможность облегчить работу сервера и в тоже время улучшить реакцию клиента сделав бэкэнд статичным файлом. Который переписывается когда происходят интересные клиенту изменения в системе.
Пока я нашел простой способ приспособить jsHttpRequest.js для этого дела:
методу send добавил аргумент specified_id, и задавая id делаю контролируемым способ проверки соответствия пришедших данных запрошенным.

t.send = function(content, specified_id) {
. . .
JsHttpRequest.extend(ldObj, {
. . .
id: specified_id || ((new Date().getTime()) + "" + JsHttpRequest.COUNT++ ...
  Topic: Вариант конвертора JsHttpRequest::php2js не оборачивающий числа в кавычки
Denis Usenko

Replies: 0
Views: 3611

PostForum: JsHttpRequest :: JavaScript   Posted: Sat Jul 12, 2008 3:04 am   Subject: Вариант конвертора JsHttpRequest::php2js не оборачивающий числа в кавычки
По следам
function php2js($a=false)
{
// JSON escape sequence (http://json.org/)
// " \x22 quotation mark
// \ \x5C revers solidus
// / \x2F solidus
// \b \x08 backspace
// \f \x0C formfeed
// \n \x0A newline
// \r \x0D carriage return
// \t \x09 horizontal tab
// \u \uNNNN four hexadecimal digits (is not supported)

static $escape = "\"\\\/\x08\x0C\n\r\x09";

// PHP types:
// boolean (since PHP 4)
// integer
// double (for historical reasons "double" is returned in case of a float, and not simply "float")
// string
// array
// object
// resource (since PHP 4)
// NULL (since PHP 4)

switch (gett ...
  Topic: Форматирование строк
Denis Usenko

Replies: 20
Views: 15256

PostForum: Разное :: JavaScript   Posted: Fri Oct 05, 2007 10:04 am   Subject: Форматирование строк
Поправил код (из-за лишней запятой не работало в опера и ие).
KES Опера 9.21, ИЕ 6, FF 2.0.0.7 -- все правильно:
07.10.05 11:00:38
2007.10.05 11:00:38

А браузер какой?
  Topic: Форматирование строк
Denis Usenko

Replies: 20
Views: 15256

PostForum: Разное :: JavaScript   Posted: Fri Oct 05, 2007 9:05 am   Subject: Форматирование строк
Rumata
Без вызвавшего неприязнь заворачивания в функцию:


Date.prototype.getMonthNumber = function(){ return 1 + this.getMonth()}
Date.prototype.format = function(fs){
var self = this
return fs.replace(/\%([YyMDhms])/g,
function(a,k){
var str = '0' + self[{
Y: 'getFullYear',
y: 'getFullYear', // правка: было getYear
M: 'getMonthNumber',
D: 'getDate',
h: 'getHours',
m: 'getMinutes',
s: 'getSeconds' // правка: удалена запятая
}[k]]()
return str.substring(str.length - (k == 'Y' ? 4 : 2))
}
)
}

только что-то мне подсказывает, что и этот вариант не будет принят благосклонно :) Или ошибаюсь, и так значитально лучше стало ? :)
  Topic: Форматирование строк
Denis Usenko

Replies: 20
Views: 15256

PostForum: Разное :: JavaScript   Posted: Fri Oct 05, 2007 4:31 am   Subject: Форматирование строк
Один только вопрос - почему игреки надо иметь и большой, и маленький, а вот эмку, к примеру, достаточно иметь только большую? Есть такой стандарт при работе с датами?
Нет, стандарты не причем, Y -- год в 4 символа, y -- год в 2 символа.

Rumata, сильно не пинайте )) пианист играет как умеет ))
Вот точно замечено, with там, действительно, надо убрать -- совершенно лишенее.
лаконичный же код запутан - всего лишь расширяется "класс" Date. а глаз бегает по коду - не упустить бы чего.Ничего там не запутано. Люди, как ни крути, быстро оперируют только паттернами. И хорошие программисты и плохие, тоже. Просто для кого-то это новый "паттерн" )) Точнее сказать, теперь уже не новый ))
  Topic: Сверхбыстрая сортировка таблиц (обсуждение)
Denis Usenko

Replies: 41
Views: 29678

PostForum: Разное :: JavaScript   Posted: Mon Jul 09, 2007 3:59 am   Subject: Сверхбыстрая сортировка таблиц (обсуждение)
Это все те случаи когда сортируемых данных слишком много чтобы браузар их смог быстро отсортировать )) Не буду придумывать примеры задач, это будет все очень субъективно, так как во многом зависит от предпочтений юзера.

И к тому же вопрос не совсем корректно поставлен: "фильтрация или сортировка?". Как-то странно звучит, не правда-ли? Что-же, одно исключает другое? А речь в теме именно о том как сделать быстрее сортировку. То что фильтрация вещь хорошая никто не сомневается, но нельзя же принуждать юзера пользоваться одним, и не пользоваться другим объясняя это медленной джаваскрипт.

Я уже приводил циферки для браузеров, если при сортировка вызывает калбэк компарер это ухудшает время в три - пять раз, если компарер делает что-то помимо а cmp b, это ухудшает время в десятки-сотни раз.
У меня, например, не стояло задачи сортировать огромные объемы данных в браузере. А вот чтобы сделать мгновенную, вообще без задержек, сортировку вполне приемлемого объема данных (несколько сотен ря ...
  Topic: Сверхбыстрая сортировка таблиц (обсуждение)
Denis Usenko

Replies: 41
Views: 29678

PostForum: Разное :: JavaScript   Posted: Fri Jul 06, 2007 7:10 am   Subject: Сверхбыстрая сортировка таблиц (обсуждение)
да не нужна пользователю такая сортировка, которая выдаёт гигантский список пусть и упорядоченных данных. пользователю как раз нужна нормальная фильтрация, которую некоторые от лени пытаются заменить сортировкой...
Я пользователь -- мне не нужна фильтрация, мне нужна сортировка )) Ну так нельзя, чем вам не приглянулась идея WingedFox'а ? Ведь речь о еще одной оптимизации, которую можно использовать (или нет) наряду с другими. Кроме того возможно это будет универсальный множественный (приоритетный или как это называется правильно?) сортировщик.
Насчет скорости -- аякс запрос ведь тоже не мгновенно сработает.
  Topic: Сверхбыстрая сортировка таблиц (обсуждение)
Denis Usenko

Replies: 41
Views: 29678

PostForum: Разное :: JavaScript   Posted: Mon Jul 02, 2007 1:12 am   Subject: Сверхбыстрая сортировка таблиц (обсуждение)
10000
Не буду с Вами спорить )). Скажу лишь, что любой подход не исключает полезности быстрой кастомной сортировки на клиенте. А десять тысяч файлов будут тормозить и в тоталкомандере, и тоже из-за необходимости отсортировать их все даже перед выводом первой сотни.
 
Page 1 of 2 All times are GMT + 3 Hours
Goto page 1, 2  Next
XML