Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   placeholder под IE (https://javascript.ru/forum/events/50235-placeholder-pod-ie.html)

mixtape 17.09.2014 21:57

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 одного из этих элементов. В результате, при снятии фокуса с любого из полей полей парсится одно и того же значение. Ошибка где-то в логике, а понять не могу.

рони 17.09.2014 23:09

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


подробнее тут http://javascript.ru/basic/closure#p...-ispolzovaniya

BETEPAH 17.09.2014 23:17

На всякий случай https://github.com/jamesallardice/Placeholders.js

kostyanet 18.09.2014 22:10

Цитата:

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

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

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

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

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

А вам эта гнилая работа зачем?

kostyanet 18.09.2014 22:13

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

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

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


Часовой пояс GMT +3, время: 15:15.