События Javascript, не всплывающие при использовании водяного знака в текстовом поле - PullRequest
1 голос
/ 10 марта 2009

Я пытаюсь внедрить простой водяной знак в текстовое поле, которое исчезает, когда текстовое поле получает фокус. Я нашел этот плагин jQuery, который, казалось, отлично работал:

http://remysharp.com/2007/01/25/jquery-tutorial-text-box-hints/

Водяной знак работал так же, как рекламируется с этим кодом:

<script type="text/javascript" src="/includes/_jQuery/_Library/jquery-1.3.1.min.js"></script>
<script type="text/javascript" src="/includes/_jQuery/_plugs/_hint/jquery.hint.js"></script>
<script type="text/javascript">
    $(document).ready(function() {
        $("input[title!=]").hint();
    });
</script>

<table>
    <tr>
        <td><input type="text" title="Blah" /></td>
    </tr>
</table>

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

        $("table").click(function() {
            alert("blah");
        });

Кто-нибудь знает, почему событие не всплывает, когда щелкается часть текстового поля, а не другая?

1 Ответ

1 голос
/ 10 марта 2009

Кто-нибудь знает, почему событие не всплывает, когда щелкает часть текстового поля

Похоже, что это ошибка, специфичная для Firefox, затрагивающая как ввод текста, так и текстовые области. Вы можете воспроизвести его всего несколькими строками кода, это не связано с jQuery или не связано с плагином:

<form onclick="alert('hello')">
    <input type="text" value="hello!" onfocus="this.value=''">
</form>

(Хотя я думаю, что у плагина есть некоторые довольно существенные проблемы. Он забывает использовать 'var' для локальных переменных, позволяя им просачиваться в глобальную область. Это приводит к сбою нескольких элементов '.blur' на одной странице. Плюс «пустые» значения будут по-прежнему отправляться в форму в виде строки заголовка, и вы не сможете различить «реальные» значения, введенные пользователем, которые соответствуют строке заголовка.)

Событие не вспыхивает, только когда значение входа изменилось в событии фокуса . Предположительно, я предполагаю, что Firefox внутренне распознает, что click () произошел с текстом внутри ввода, и ожидает, что это событие всплывет у каждого из его предков. Но когда событие click у ближайшего родителя вызывает срабатывание onfocus, эта функция удаляет текст из своего родителя. Теперь для события click ничего не произошло, нет родительской цепочки, через которую можно всплыть.

...