Javascript - атрибуты ввода текста - PullRequest
0 голосов
/ 26 мая 2010

Мне нужно создать элемент формы

отключено type = "text" value = "Shui Mu Tsinghua" />

, что отключено по умолчанию. Включается, когда onmouseover происходит.

OnMouseOver = "this.disabled = ложь;"

И отключен onmouseout

onmouseout = "this.disabled = истина;"


Мне нужно проверить следующее. Если сфокусирован, его не следует отключать.

И если элемент формы теряет фокус, он отключается.

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

??? " onblur = " ??? " onmouseout = "if ( ??? ) {this.disabled = true;}" />

Ответы [ 4 ]

4 голосов
/ 26 мая 2010

Это не будет работать, так как onmouseover не срабатывает при отключенных входах в большинстве браузеров. (Opera - исключение, а IE обычно нет, за исключением случаев, когда вы обманываете его с помощью операции перетаскивания.)

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

Если это просто стиль, то используйте стили:

<style type="text/css">
    .weirdinput { color: silver; }
    .weirdinput:hover, .weirdinput:focus { color: black; }
</style>

<input class="weirdinput" value="smth" />

Однако IE <8 не поддерживает <code>:focus, а IE <7 не поддерживает <code>:hover для не-ссылок, поэтому, если вам нужно работать над этим, вам придется добавить некоторые сценарии, например, , что-то вроде:

<style type="text/css">
    .weirdinput { color: silver; }
    .weirdinput:hover, .weirdinput:focus, .weirdhover, .weirdfocus { color: black; }
</style>

<input class="weirdinput" value="smth" />

<!--[if lt IE 8]><script type="text/javascript">(function() {

    // Fix focus/hover for IE on all inputs with class 'weirdinput'
    //
    var inputs= document.getElementsByTagName('input');
    for (var i= 0; i<inputs.length; i++) {
        var input= inputs[i];
        if (input.className.indexOf('weirdinput')!==-1) {
            input.onmouseover= mouseover;
            input.onmouseout= mouseout;
            input.onfocus= focus;
            input.onblur= blur;
        }
    }

    function mouseover() {
        this.className+= ' weirdhover';
    }
    function mouseout() {
        this.className= this.className.replace(' weirdhover', '');
    }
    function focus() {
        this.className+= ' weirdfocus';
    }
    function blur() {
        this.className= this.className.replace(' weirdfocus', '');
    }

})();</script><![endif]-->
0 голосов
/ 26 мая 2010

отключенные поля не отправляются, не находятся в списке узлов с вкладками клавиш и не прослушивают и не передают события. Вы отключаете вход, чтобы пользователь не мог изменить его значение.

Ни одно поле не может быть изменено без предварительной фокусировки.

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

Но без имени, как в вашем примере, значение поля не будет отправлено вместе с его формой в любом случае, так как может иметь значение, что поле отключено или нет?

Если вы намереваетесь отключить поле, если javascript не включен, почему бы просто не скрыть его с помощью css и показать его в стиле сценариев?

0 голосов
/ 26 мая 2010

Я думаю, что у вас будет много проблем с таким поведением, потому что отключенное поле не получит событие mouseover (или mouseenter, если ваш браузер его поддерживает). Я даже пытался захватить событие на элементе под ним, но отключенное поле его съедает.

0 голосов
/ 26 мая 2010

То, что вы могли бы сделать, это;

  1. на фокусе установить переменную в true;
  2. при размытии установите переменную в false; и отключен true
  3. Значение onmouseover отключено, если установлено значение true
  4. onmouseout set отключен ТОЛЬКО ЕСЛИ переменная равна false; (поэтому не сфокусировано)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...