Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.09.2014, 20:57
Интересующийся
Отправить личное сообщение для mixtape Посмотреть профиль Найти все сообщения от mixtape
 
Регистрация: 19.06.2014
Сообщений: 13

placeholder под IE
Собственно хочу организовать поддержку placeholderа на IE9 и ранее.
Имеется следующие функции:
function gt(obj) {
  var res = [],
      temp = null;
  for(var i = 1; i < arguments.length; i++) {
    temp = obj.getElementsByTagName(arguments[i]);
    for(var j = 0; j < temp.length; j++)
      res.push(temp[j]);
  }
  return res;
}
function placeholder() {
  if(!("placeholder" in document.createElement("INPUT"))) {
    var inputs = gt(document, "INPUT", "TEXTAREA");
    for(var i = 0; i < inputs.length; i++)
      if(inputs[i].getAttribute("placeholder")) {
        var pholder = inputs[i].getAttribute("placeholder");
        if(inputs[i].nodeName == "INPUT") {
          inputs[i].value = pholder;
          inputs[i].onfocus = function(){this.value = "";};
          inputs[i].onblur = function(){this.value = pholder;};
        }
        else if(inputs[i].nodeName == "TEXTAREA") {
          if(inputs[i].childNodes[0]) inputs[i].childNodes[0].nodeValue = pholder;
          else inputs[i].appendChild(document.createTextNode(pholder));
          inputs[i].onfocus = function(){this.childNodes[0].nodeValue = "";};
          inputs[i].onblur = function(){this.childNodes[0].nodeValue = pholder;};
        }
      }
  }
}

Проблема в том, что всем инпут- и текстареа- элементам в DOM на событие onblur он привязывает placeholder одного из этих элементов. В результате, при снятии фокуса с любого из полей полей парсится одно и того же значение. Ошибка где-то в логике, а понять не могу.
Ответить с цитированием
  #2 (permalink)  
Старый 17.09.2014, 22:09
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 28,067

mixtape,
... потому что переменная в строке 16 содежит последнее присвоенное значение ... когда функция в строке 20 или 26 обратится к этой переменной ...
вариант 20 строки ...
inputs[i].onblur = (function(a){return function(){this.value = a}})(pholder);


подробнее тут http://javascript.ru/basic/closure#p...-ispolzovaniya
Ответить с цитированием
  #3 (permalink)  
Старый 17.09.2014, 22:17
Аватар для BETEPAH
Профессор
Отправить личное сообщение для BETEPAH Посмотреть профиль Найти все сообщения от BETEPAH
 
Регистрация: 23.06.2011
Сообщений: 1,165

На всякий случай https://github.com/jamesallardice/Placeholders.js
Ответить с цитированием
  #4 (permalink)  
Старый 18.09.2014, 21:10
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,719

Цитата:
и ранее
До Windows-95 что ли?

Невтему. Делал локальную рассылку и оказалось что Ишак не понимает тегов figure. Ну то есть Аутлук Экспресс, который парсит хтмл через ишака (причем и в темп валит все как браузер). Переделал на div и вспомнил что на фигурах у меня и галереи сделаны. Открыл в ИЕ - так и есть - ну хотя бы он их как div мог бы понять. Нет, походу как span рендерит. Короче все развалилось.

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

Поддержка старья работает против вас и против всех. Не поддерживайте старье, кладите на маргиналов и народ быстрее будет обновлять свои ржавые браузеры на менее ржавые.

Метафорически Ишаку шестому сноса бы не было, если бы не менялись каждый год спецификации. Ну и хрен на него - нужен новый. А будете поддерживать старье - зачем тогда народу обновляться. Веб-дизайнер же все наладил.

А вам эта гнилая работа зачем?
Ответить с цитированием
  #5 (permalink)  
Старый 18.09.2014, 21:13
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,719

Кстати, старые сайты симметрично страдают. Я как-то зашел на сайт одной моднейшей конторы, так у них еще апплеты сохранились. Которые ежу понятно нифига не пахали.

ЗЫ У меня ишак номер 8, потому что винда - ХР. Новые на нее не встают, это МС- префикс как известно, чтобы их глюкавые новые винды покупали. Но, браузер это не ОС и даже не Фотошоп. Скачать и поставить новый, хотя бы хром - минутное дело.

ЗЫЫ Конечно, у них тоже префиксы, мать их за ногу. У ФФ кнопка обновить переехала направо, это специально делается чтобы привыкали и в другом браузере было некофортно. Главное меню у Винды почему кверху жопой? Ну то есть внизу, в то время как у всех программ (а ОС тоже программа) оно вверху? ЧТобы привыкали и испытывали баттхерт на какой-нить макоси не приведи господь.

Последний раз редактировалось kostyanet, 18.09.2014 в 21:20.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Что означает [^] riva Общие вопросы Javascript 26 07.08.2014 19:42
jquery для placeholder работает только для первого input в ie Nailya jQuery 1 13.05.2014 08:57
Webshtorm под линуксом. Отладка. eugenk Общие вопросы Javascript 2 09.01.2014 00:52
JS + CSS Под загрузка фонового изображения XboxPro Элементы интерфейса 0 14.11.2012 09:16
Под IE8 задизейблена кнопка, а под Mozilla нет Svetich Internet Explorer 2 05.07.2011 09:03