Недавно я рассматривал jquery / javascript-решения для эмуляции атрибута placeholder
, но ни одно из них, похоже, не правильно. Общие проблемы:
- Первоначальная поддержка браузера не используется
- Форма может фактически содержать значение текста заполнителя
- Невозможность распознать между заполнителем и вводом пользователем, если значения идентичны (Эй, мой адрес электронной почты IS user@example.com !! Почему он не отправляется? Эй, я хотел найти строку "Поиск "но это меня не отпустит!)
- Сложно стилизовать или различить обычный текст и заполнитель текста
- Навязчивая реализация (почти всегда. Я не хочу добавлять 2 деления на вход и таблицу стилей для этого)
- Просто не работает. По крайней мере 2 из них на веб-сайте jQuery.
Я немного поиграл, пытаясь заставить это работать должным образом (используя несколько подсказок из части кода, который я уже видел), но это все еще требует работы. В частности, форма может содержать значение заполнителя. Приветствуются комментарии и моды к jsfiddle . (Примечание: демонстрация должна просматриваться в браузере без поддержки заполнителя) Большая часть кода, который я видел, принимает значение placeholder
и вставляет его в сам ввод, что приводит к этой проблеме, я чувствую, что должен быть лучший способ.
Есть ли хорошее чистое решение, которое действительно работает ?
РЕДАКТИРОВАТЬ: я хочу подчеркнуть это: он должен вести себя так, как вы видите его в браузерах, которые поддерживают его как можно больше, и быть как можно более un , как показано в моем текущем коде , который не требует ничего, кроме включения скрипта и использования placeholder
, как обычно для браузеров, которые его поддерживают.
ОБНОВЛЕНИЕ: Текущее решение @ DA - это пара исправлений ошибок, отличных от идеальных (см. Комментарии), хотелось бы, чтобы все это собралось на 100% и заставило стыдиться весь плохой и ошибочный код в сети.
ОБНОВЛЕНИЕ: Это работает с парой модов к коду DA, но это все еще не идеально, в основном в отношении динамически добавляемых полей ввода и существующих submit()
привязок. Спасибо за помощь, я решил, что это того не стоит. Я знаю несколько человек, которые определенно будут использовать это все же. Это хороший трюк, но для меня не стоит даже 1% -ная вероятность того, что форма отправит что-то, что не предназначено, или неправильно прочитает ввод пользователя. Эта второстепенная функция просто не стоит головной боли, IE и pals могут справиться с ней, или она может быть реализована в каждом конкретном случае, если это действительно необходимо, например, если клиент требует этого. @DA еще раз спасибо, это лучшая реализация, которую я видел.
ЗАКЛЮЧЕНИЕ: Я думаю, что единственный способ преодолеть все эти проблемы - что-то вроде этого:
- Скопировать значение заполнителя в новый элемент уровня блока
- Добавить новый элемент к входу
- Рассчитать высоту границы и отступа ввода и переместить новый элемент над ним как можно ближе к положению, в котором будет находиться текст
- Используйте стандартные события размытия / изменения / фокуса, чтобы скрыть элемент, когда вход имеет значение или находится в фокусе
Таким образом, вам не нужно ничего делать при отправке или решать любые другие проблемы, которые могут возникнуть. Извините, демо-версии пока нет, я должен вернуться к работе, но я сохраню окончательную редакцию, когда все будет вместе.