JS IE 5+ focus
От: uzzy Россия  
Дата: 19.12.03 13:32
Оценка:
Здравствуйте!

Проблемка такая:
Имеется
<html>
<body>
<table>
<tr><td>Test1 :</td><td>
<input type="text" id="t1">
</td></tr>
<tr><td>Test2 :</td><td>
<input type="text" id="t2">
</td></tr>
</table>
</body>
</html>


Требуется:
Чтобы оба текстбокса (t1, и t2) не выпускали пользователя, пока те не внесут требуемое слово.
Пусть для t1 = "test1"
Пусть для t2 = "test2"

Примечание:
Вроде бы легко, ан нет, уже полдня мучаюсь, а толком ничего и не получилось нормального, 100% работающего, по сему не предлагаю свои варианты дабы не сбить Вас с пути истинного.
RSDN@Home 7.7.0 stable
Re: JS IE 5+ focus
От: anonymous Россия http://denis.ibaev.name/
Дата: 19.12.03 14:31
Оценка: 18 (1)
Здравствуйте, uzzy

вот это заставляет пользователя последовательно ввести 2 значения (IE6)

<html>
  <head>
    <title></title>
    <script type="text/javascript">

var t1Focus = false;

function init() {
    document.getElementById('t1').focus();
    t1Focus = true;
}

function t1Blur() {
    t1Focus = false;
    setTimeout('_t1Blur()', 1);
}

function _t1Blur() {
    if (document.getElementById('t1').value != 'test1') {
        document.getElementById('t1').focus();
        t1Focus = true;
    }
}

function t2Blur() {
    setTimeout('_t2Blur()', 1);
}

function _t2Blur() {
    if (!t1Focus) {
        if (document.getElementById('t2').value != 'test2') {
            document.getElementById('t2').focus();
        }
    }
}

    </script>
  </head>
  <body  onLoad="init()">
    <table>
      <tr><td>Test1 :</td><td><input type="text" id="t1" onBlur="t1Blur()"></td></tr>
      <tr><td>Test2 :</td><td><input type="text" id="t2" onBlur="t2Blur()"></td></tr>
    </table>
  </body>
</html>
Re: JS IE 5+ focus
От: Xumpopena Россия scripting.fatal.ru
Дата: 19.12.03 15:13
Оценка:
Здравствуйте, uzzy, Вы писали:

U>Требуется:

U>Чтобы оба текстбокса (t1, и t2) не выпускали пользователя, пока те не внесут требуемое слово.
U>Пусть для t1 = "test1"
U>Пусть для t2 = "test2"

С точки зрения, скажем так, чистого программирования, решение сей загадки быть должно. Но с точки зрения пользователя, а также программиста, работающего для пользователя (в особенности программистом не являющегося), применение подобных мер вряд-ли можно считать целесообразным (во всяком случае хорошим тоном). Не знаю конкретной постановки задачи, но в подавляющем большинстве случаев применение таких, прямо сказать, драконовских мер выдержит не каждый уважающий себя юзер: (Windows) Alt/F4 или салют тремя пальцами — и прощай, великолепный сайт/программа, навеки веков, аминь (в случае если сей код не связан с предоставленем доступа к секретным даннным, да и то можно реализовать иначе)!

Более корректно, это даже не IMHO, сообщение об ошибке и блокирование клавиши OK. Но клавишу CANCEL — оставь для меня, любимого. Иначе не пойду на твой cool-site .
Re[2]: JS IE 5+ focus
От: ЖуК Украина http://smart-ip.net/
Дата: 19.12.03 15:50
Оценка:
Здравствуйте, Xumpopena, Вы писали:

X>Здравствуйте, uzzy, Вы писали:


U>>Требуется:

U>>Чтобы оба текстбокса (t1, и t2) не выпускали пользователя, пока те не внесут требуемое слово.
U>>Пусть для t1 = "test1"
U>>Пусть для t2 = "test2"

X> С точки зрения, скажем так, чистого программирования, решение сей загадки быть должно. Но с точки зрения пользователя, а также программиста, работающего для пользователя (в особенности программистом не являющегося), применение подобных мер вряд-ли можно считать целесообразным (во всяком случае хорошим тоном). Не знаю конкретной постановки задачи, но в подавляющем большинстве случаев применение таких, прямо сказать, драконовских мер выдержит не каждый уважающий себя юзер: (Windows) Alt/F4 или салют тремя пальцами — и прощай, великолепный сайт/программа, навеки веков, аминь (в случае если сей код не связан с предоставленем доступа к секретным даннным, да и то можно реализовать иначе)!


X> Более корректно, это даже не IMHO, сообщение об ошибке и блокирование клавиши OK. Но клавишу CANCEL — оставь для меня, любимого. Иначе не пойду на твой cool-site .


Насрать на этот дурацкий базар. Уззи придумал классную головоломку — не ломай кайф философией

З.Ы. Если обидел — извини
_____________________________________________________________
"Голова — кость, поэтому болеть не может..." © Неизвестный автор
Re: JS IE 5+ focus
От: ЖуК Украина http://smart-ip.net/
Дата: 19.12.03 15:51
Оценка: 45 (3)
Здравствуйте, uzzy, Вы писали:

U>Здравствуйте!


U>Проблемка такая:

U>Имеется
U>
<html>>
<body>>
U><table>
<tr>><td>Test1 :</td><td>
U><input type="text" id="t1">
</td>></tr>
<tr>><td>Test2 :</td><td>
U><input type="text" id="t2">
</td>></tr>
U></table>
U></body>
U></html>
U>


U>Требуется:

U>Чтобы оба текстбокса (t1, и t2) не выпускали пользователя, пока те не внесут требуемое слово.
U>Пусть для t1 = "test1"
U>Пусть для t2 = "test2"

U>Примечание:

U>Вроде бы легко, ан нет, уже полдня мучаюсь, а толком ничего и не получилось нормального, 100% работающего, по сему не предлагаю свои варианты дабы не сбить Вас с пути истинного.

Для частного случая, который ты привел даю свое решение:

<html>
<body>
<table>
<tr><td>Test1 :</td><td>
<input type="text" id="t1">
</td></tr>
<tr><td>Test2 :</td><td>
<input type="text" id="t2">
</td></tr>
</table>
<script language="JavaScript" type="text/javascript">
var t1Focused = false;
var t2Focused = false;

document.getElementById( 't1').onfocus = function() { t1Focused = t2Focused ? false : true; }
document.getElementById( 't2').onfocus = function() { t2Focused = t1Focused ? false : true; }

document.getElementById('t1').onblur = function() {
    if (t2Focused) {
        this.blur();
    } else {
        if (this.value == 'blablabla') {
            this.blur();
            t1Focused = false;
        } else {
            this.focus();
        }
    }
}

document.getElementById('t2').onblur = function() {
    if (t1Focused) {
        this.blur();
    } else {
        if (this.value == 'bla') {
            this.blur();
            t2Focused = false;
        } else {
            this.focus();
        }
    }
}
</script>
</body>
</html>



Для общего случая с произволным количеством элементов — в процессе

З.Ы. ИЕ 6
_____________________________________________________________
"Голова — кость, поэтому болеть не может..." © Неизвестный автор
Re[3]: JS IE 5+ focus
От: Xumpopena Россия scripting.fatal.ru
Дата: 19.12.03 16:31
Оценка:
Здравствуйте, ЖуК, Вы писали:
ЖуК>Насрать на этот дурацкий базар. Уззи придумал классную головоломку — не ломай кайф философией

ЖуК>З.Ы. Если обидел — извини


Если только головоломка — то ничуть не обидел. Более того, попробую присоединиться ; а если это — стиль, не взыщи .
Re[2]: JS IE 5+ focus
От: uzzy Россия  
Дата: 20.12.03 03:56
Оценка:
Здравствуйте, ЖуК, Вы писали:

ЖуК>Для общего случая с произволным количеством элементов — в процессе

В принципе идея (точнее решение) понятно, до общего случая уже доведу сам, правда если все еще интересно, приводи, мало ли кому понадобиться.
Спасибо огромное.

ЖуК>З.Ы. ИЕ 6

З.Ы. Под рукой пока 5 и 5.5 не имеется, но в принципе должно работать. Ничего сверхестественного вроде бы нету.
З.З.Ы. Странно обоим поставил 3 (тебе и анонимусу), причем тебе первому, а анонимусу больше досталось .
RSDN@Home 7.7.0 stable
Re[2]: JS IE 5+ focus
От: uzzy Россия  
Дата: 20.12.03 03:56
Оценка:
Здравствуйте, anonymous, Вы писали:

Спасибо огромное, но решение Жука мне нравится больше. По крайней мере меньше моргания.
RSDN@Home 7.7.0 stable
Re[4]: JS IE 5+ focus
От: uzzy Россия  
Дата: 20.12.03 03:57
Оценка:
Здравствуйте, Xumpopena, Вы писали:

X>Здравствуйте, ЖуК, Вы писали:

ЖуК>>Насрать на этот дурацкий базар. Уззи придумал классную головоломку — не ломай кайф философией

ЖуК>>З.Ы. Если обидел — извини


X>Если только головоломка — то ничуть не обидел. Более того, попробую присоединиться ; а если это — стиль, не взыщи .

Это не стиль, на моем сайте ты этого не увидишь, так что спи спокойно .
RSDN@Home 7.7.0 stable
Re[3]: JS IE 5+ focus
От: uzzy Россия  
Дата: 20.12.03 04:38
Оценка: 4 (1) +1
Здравствуйте, uzzy, Вы писали:

В принципе уже довел:
<html>
   <head>
      <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
      <script language="javascript" type="text/javascript">
doFocus = function ()
{
   oFocused[this.id] = true;
   for (var i in oFocused)
   {
      if ((i != this.id) && (oFocused[i]))
      {
         oFocused[this.id] = false;
      }
   }
};
doBlur = function ()
{
   var obj = null;
   for (var i in oFocused) {
      if ((i != this.id) && (oFocused[i])) {
         obj = document.getElementById (i);
      }
   }
   if (obj) {
      this.blur ();
   }
   else {
      if (this.value == oTest[this.id]) {
         this.blur();
         oFocused[this.id] = false;
      } else {
         this.focus();
      }
   }
};
      </script>
   </head>
   <body>
      <table>
         <tr>
            <td>Test0 :</td>
            <td>
               <input type="text" id="t0">
            </td>
         </tr>
         <tr>
            <td>Test1 :</td>
            <td>
               <input type="text" id="t1">
            </td>
         </tr>
         <tr>
            <td>Test2 :</td>
            <td>
               <input type="text" id="t2">
            </td>
         </tr>
         <tr>
            <td>Test3 :</td>
            <td>
               <input type="text" id="t3">
            </td>
         </tr>
         <tr>
            <td>Test4 :</td>
            <td>
               <input type="text" id="t4">
            </td>
         </tr>
         <tr>
            <td>Button :</td>
            <td>
               <button> 
                  <table>
                     <tr>
                        <td>Button :</td>
                        <td><input type="text" id="Text1" NAME="Text1"></td>
                     </tr>
                  </table>
               </button>
            </td>
         </tr>
         <tr>
            <td>TextArea :</td>
            <td>
               <textarea> Text Area</textarea>
            </td>
         </tr>
         <tr>
            <td>Input :</td>
            <td>
               <input type="text">
            </td>
         </tr>
      </table>
      <script language="JavaScript" type="text/javascript">

var oFocused = new Object ();
var oTest = new Object ();
oTest["t0"] = "Uzzy";
oTest["t1"] = "Жук";
oTest["t2"] = "anonymous";
oTest["t3"] = "test1";
oTest["t4"] = "test2";

var oTexts = document.getElementsByTagName ("INPUT");
var nCount = oTexts.length;
for (var i = 0; i < nCount; i++)
{
   if (oTest[oTexts[i].id])
   {
      oTexts[i].onblur = doBlur;
      oTexts[i].onfocus = doFocus;
      oFocused[oTexts[i].id] = false;
   }
}
      </script>
   </body>
</html>


Special thanks to Жук.
RSDN@Home 7.7.0 stable
Re[3]: JS IE 5+ focus
От: anonymous Россия http://denis.ibaev.name/
Дата: 20.12.03 05:12
Оценка:
Здравствуйте, uzzy, Вы писали:

U>Здравствуйте, anonymous, Вы писали:


U>Спасибо огромное, но решение Жука мне нравится больше. По крайней мере меньше моргания.


так за 10 мин. написано было... ) что в голову пришло...
Re[4]: JS IE 5+ focus
От: uzzy Россия  
Дата: 20.12.03 05:59
Оценка:
Здравствуйте, uzzy, Вы писали:

Код, указанный постом ранее, представлен всеобщей публике для тестирования, поскольку сейчас не имеется под руками IE 5 и 5.5, хотелось бы услышать результаты.

Проверил на Opere 7.20.3144 — Работает .
RSDN@Home 7.7.0 stable
Re[3]: JS IE 5+ focus
От: ЖуК Украина http://smart-ip.net/
Дата: 20.12.03 13:27
Оценка: 15 (2)
Здравствуйте, uzzy, Вы писали:

U>В принципе идея (точнее решение) понятно, до общего случая уже доведу сам, правда если все еще интересно, приводи, мало ли кому понадобиться.

U>Спасибо огромное.

Конечно интересно! (Тем более, что я обещал) Вот решение

Итого. Создаем на странице сколько хотим элементов <input type=text> При этом, я дабы долго не заморачиваться немного схитрил и задаю нужные значения в аттрибуте VALUE . Но это наверное не очень гут... хотя если повесить скрипт на онлоад... или скажем даже так — показывать всю страницу полностью на онлоад, то в принципе будет ничего... ну а все остальное уже по ходу кода...

<html>
<body>
<table>
<tr><td>Test1 :</td><td>
<input type="text" value="blablabla">
</td></tr>
<tr><td>Test2 :</td><td>
<input type="text" value="blabla">
</td></tr>
<tr><td>Test3 :</td><td>
<input type="text" value="bla">
</td></tr>
<tr><td>Test4 :</td><td>
<input type="text" value="">
</td></tr>
</table>
<div id="dd"></div>
<script language="JavaScript" type="text/javascript">

var dAll = document.all;
var texts = Array();
var cnt = 0;

// Обходим все элементы страницы и находим все текстовые поля
for (var i = 0; i < dAll.length; i++) {
    if( dAll[i].type == 'text') {
        texts[cnt++] = i;                     // Создаем массив уникальных идентификаторов текстовых полей
        dAll[i].uniqueId = i;                 // Определяем уникальный идентификатор у каждого поля
        dAll[i].neededValue = dAll[i].value;  // Определяем neededValue у поля, как заданный атрибут value в тэге поля :) - это маленькое жульничество. 
                                              // Скорее всего из-за него придется весь этот скрипт вешать на OnLoad документа
        dAll[i].value = "";                   // Сбрасываем value у поля
    }
}

document.focusedElement = null;

// пишем обработчики событий OnFocus и OnBlur для всех текстовых полей
for (var i = 0; i < texts.length; i++) {
    
    // строим обработчики OnFocus
    dAll[texts[i]].onfocus = function() {
        // если фокус не находится ни в одном поле говорим, что фокус у данного поля :)
        if (document.focusedElement == null) {
            document.focusedElement = this.uniqueId;
        }
        // если фокус уже находится у другого поля - покидаем данное
        if (document.focusedElement != this.uniqueId) {
            this.blur();
        }
    }
    
    // Строим обработчики OnBlur
    dAll[texts[i]].onblur = function() {
        // если фокус уже находится у другого поля - покидаем данное
        if( document.focusedElement != this.uniqueId) {
            this.blur();
        } else {
            // иначе смотрим введено ли нужное значение в поле
            if (this.value == this.neededValue) {
                this.blur();                       // да введено, покидаем поле
                document.focusedElement = null;    // говорим, что фокуса ни у кого нет
            } else {
                this.focus();                      // иначе возвращаем фокус "на место"
            }
        }
    }
    
}
</script>
</body>
</html>


U>З.З.Ы. Странно обоим поставил 3 (тебе и анонимусу), причем тебе первому, а анонимусу больше досталось .


Это патамучта так работает система оценок. Просто ты, видать, уже мне ставил макс. оценку в этом месяце... Это что бы не накручивали... так пишут в разделе, где описано начисление оценок — мошь почитать
_____________________________________________________________
"Голова — кость, поэтому болеть не может..." © Неизвестный автор
Re[4]: JS IE 5+ focus
От: uzzy Россия  
Дата: 20.12.03 13:52
Оценка:
Здравствуйте, ЖуК, Вы писали:

[skipped]
Как подробно-то, книжку по javascript-ам не хочешь написать .

U>>З.З.Ы. Странно обоим поставил 3 (тебе и анонимусу), причем тебе первому, а анонимусу больше досталось .


ЖуК>Это патамучта так работает система оценок. Просто ты, видать, уже мне ставил макс. оценку в этом месяце... Это что бы не накручивали... так пишут в разделе, где описано начисление оценок — мошь почитать

Про систему оценок знаком, но видать за был про "максимальную оценку в месяц".
RSDN@Home 7.7.0 stable
Re[5]: JS IE 5+ focus
От: ЖуК Украина http://smart-ip.net/
Дата: 20.12.03 14:02
Оценка:
Здравствуйте, uzzy, Вы писали:

U>Как подробно-то, книжку по javascript-ам не хочешь написать .


Неа... Я хочу написать по PHP 5.0 Только никак не могу определиться с чего начать — никогда книг не писал...
_____________________________________________________________
"Голова — кость, поэтому болеть не может..." © Неизвестный автор
Re[6]: жалко, такую головоломку пропустил...
От: marx paul Германия Провести онлайн-опрос
Дата: 20.12.03 19:47
Оценка: :)
стоит день форум не читать, как все уже сделано
Провести онлайн-опрос
Online-Umfrage erstellen
Re[4]: JS IE 5+ focus
От: marx paul Германия Провести онлайн-опрос
Дата: 20.12.03 19:52
Оценка:
Здравствуйте, ЖуК, Вы писали:

ЖуК>Конечно интересно! (Тем более, что я обещал) Вот решение


ЖуК>Итого. Создаем на странице сколько хотим элементов <input type=text> При этом, я дабы долго не заморачиваться немного схитрил и задаю нужные значения в аттрибуте VALUE . Но это наверное не очень гут... хотя если повесить скрипт на онлоад... или скажем даже так — показывать всю страницу полностью на онлоад, то в принципе будет ничего... ну а все остальное уже по ходу кода...



а можно было бы какой-нить свой атрибут приделать, например needeedValue, тогда и value чистить не надо...

С ув.
грустный Marx
Провести онлайн-опрос
Online-Umfrage erstellen
Re[5]: JS IE 5+ focus
От: ЖуК Украина http://smart-ip.net/
Дата: 20.12.03 22:17
Оценка:
Здравствуйте, marx paul, Вы писали:

MP>а можно было бы какой-нить свой атрибут приделать, например needeedValue, тогда и value чистить не надо...


Ну вот и не расстраивайся, что не успел — теперь ты поделись опытом: как прикрутить аттрибут к тэгу? Хотя если знаешь — то уже начни новую тему. Я вот роюсь в инфах всяких и никак не выходит што-то. Одно решение придумал но как и uzzyб не хочу пока говорить ...
_____________________________________________________________
"Голова — кость, поэтому болеть не может..." © Неизвестный автор
Re[6]: JS IE 5+ focus
От: ЖуК Украина http://smart-ip.net/
Дата: 20.12.03 22:32
Оценка: :)
Здравствуйте, ЖуК, Вы писали:

ЖуК>Здравствуйте, marx paul, Вы писали:


MP>>а можно было бы какой-нить свой атрибут приделать, например needeedValue, тогда и value чистить не надо...


ЖуК>Ну вот и не расстраивайся, что не успел — теперь ты поделись опытом: как прикрутить аттрибут к тэгу? Хотя если знаешь — то уже начни новую тему. Я вот роюсь в инфах всяких и никак не выходит што-то. Одно решение придумал но как и uzzyб не хочу пока говорить ...


Ой, ганю... Позор...
Вся моя ошибка оказалась вот в чем

<div id="d" neededValeu="blablabla">fdgjdgfjgsdjfg</div>

<script>
alert(document.getElementById('d').neededValue);
</script>


А я наворотил блин регекспов всяких... Во млин даю...
_____________________________________________________________
"Голова — кость, поэтому болеть не может..." © Неизвестный автор
Re[6]: JS IE 5+ focus
От: marx paul Германия Провести онлайн-опрос
Дата: 20.12.03 23:24
Оценка:
Здравствуйте, ЖуК, Вы писали:

ЖуК>Здравствуйте, marx paul, Вы писали:


MP>>а можно было бы какой-нить свой атрибут приделать, например needeedValue, тогда и value чистить не надо...


ЖуК>Ну вот и не расстраивайся, что не успел — теперь ты поделись опытом: как прикрутить аттрибут к тэгу? Хотя если знаешь — то уже начни новую тему. Я вот роюсь в инфах всяких и никак не выходит што-то. Одно решение придумал но как и uzzyб не хочу пока говорить ...


Да что секретничать!?
Ловите, барин, здесь
Автор: marx paul
Дата: 21.12.03
!

С ув.
Marx
Провести онлайн-опрос
Online-Umfrage erstellen
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.