JavaScript – Как делать активной и неактивной кнопку в зависимости от условий

2 Итак сегодня мне понадобилось сделать одну фичу в своём новом прожекте. Проект достаточно обширный, чтобы объянять что и как и поэтому я расскажу о самой сути этой “фичи”.

Задача состояла в том, чтобы админ мог удалять пользователей из базы. Итак задаём параметры поиска и php скрипт выдаёт нам список пользователей. Напротив каждого пользователя стоит квадратик чекбокс (checkbox) переключатель, дабы можно было выделить и удалить.

1 

Но не всё так просто. Задача состояла в том, чтобы кнопка “удалить” была неактивной, а активной становилась лишь в тот момент, когда выбран хоть один флажёк. Естественно монстры JavaScript скажут, да тут два пальца обасс “об асфальт”. Но я не монстр JS, и прибегаю к программированию на сием языке только когда захочется чего-нибудь эдакого, для удобства.

Итак, как порядочный я полез в сеть, и Яндекс и Гугл и всякие там порталы напихали мне в браузер очень много разного кода из которого мой мозг всё-таки слепил именно то, что мне требовалось. Как оказалось, нормальных (работающих) примеров в сети толком то и нет и поэтому, чтобы другой подобный мне не взрывал свой мозг, я решил выложить рабочий пример JavaScript кода.

<script type="text/javascript">
    checkobj = 0;

    function checkAvail(obj){
        if(obj.checked) checkobj++;
            else checkobj--;
        if (checkobj<=0) document.form_del.elements['submit'].disabled = true;
            else document.form_del.elements['submit'].disabled = false;
    }
</script>

HTML же реализацию думаю понять не сложно, но всё-таки я и её добавлю:

<form action="subscriber_del.php" method="post" name="form_del">
<input name="ids" type="checkbox" value="1" onClick="checkAvail(this)"> 1 - <b>One</b><br>
<input name="ids" type="checkbox" value="2" onClick="checkAvail(this)"> 2 - <b>Two</b><br>
<input name="ids" type="checkbox" value="3" onClick="checkAvail(this)"> 3 - <b>Three</b><br>

<input name="ids" type="checkbox" value="10" onClick="checkAvail(this)"> 10 - <b>Ten</b><br>
<input disabled name="submit" type="submit" value="Удалить" onClick="return confirm('Вы уверены?')">

Итак в чём же основная проблема с которой столкнулся я. Оказывается “выключить” кнопку можно как угодно, т.е. обратившись к элементу submit в любой доступной форме:

submit.disabled = true;

Однако включить (заменим на false) подобным способом не получается и именно поэтому я накопал аж вот такую конструкцию:

document.form_del.elements['submit'].disabled = true;

И вот здесь, если мы заменям true на false, то кнопка как включается, так и выключается. Ну и напоследок расшифрую я эту строчку кода:

В теущем документе в форме по имени “form_del” в элементе у которого имя “submit” (а у нас в примере это имя носит кнопка) есть свойсто “disabled”, так вот мы включаем его “true” или выключаем “false”. Т.о. включив данное свойство мы сделаем нашу кнопку неактивной, а выключив свойство, наша кнопка снова станет активной.

Успехов всем!

Рекомендую почитать

  • Добавь сайт в поисковик
  • Список буржуйских каталогов блогов (45 штук)
  • О блоге (контакты)
  • Комментарии: 13 »

    1. MAX пишет:

      03.09.2008 @ 18:47

      Не гламурно. :)

      Делаешь форму, как обычно. Потом с помощью jQuery цепляешь на свои чекбоксы событие на click который и делает все эти энейблы как нужно. Код получаеся примитивный, а главное, что можно сильно не заморачиваться с самой формой.

    2. JawsIk пишет:

      04.09.2008 @ 16:46

      Тут я могу сказать три момента:
      1. Если глянуть код функции JS, то видно, что код примитивный, а код формы я вообще привёл, как пример.
      2. Я понятия не имею, что такое jQuery, если уж употребляете что-то, то хоть объясняйте кратко, что оно такое, а так даже ломает в тындекс лезть глядеть.
      3. Да, вы правы, это не гламурно. Потому как гламурно, значит "для педиков", потому как (судя по рекламе на ТВ, или я не прав?)гламур - это женский журнал :-), которые читают либо женщины, либо женоподобные мужчины (педрилы). Я уважаю вас Максим, но увы мне неприятно слышать от вас такой жопотраховый жаргон. Из моего круга никто не употребляет это выражение, мы не гопота и не уроды, мы просто "не пидары" :-) Надеюсь, что вы избавитесь от этого глупого выражения. Успехов вам!

    3. cross пишет:

      09.09.2008 @ 16:58

      Спасибо за реализацию.

      PS: "В теущем документе" стоит подправить.

    4. MoneyCraft пишет:

      19.09.2008 @ 20:49

      Оно корректно во всех браузерах работает?

    5. Постоянная читательница пишет:

      24.09.2008 @ 15:35

      Автору блога… Читаю Ваш блог сравнительно недавно. Что хотелось бы отметить… (не подумайте что в чём то упрекаю или пытаюсь давать советы) Достаточно лаконичный дизайн, ничего лишнего я бы сказал))) Ваша тематика мне близка, и это радует. Но почему не пишите своё мнение о событиях, происходящих в мире, в плане событий международных например?? Понимаю, что “новостей хватает”, но иногда хочется узнать мнение обычного человека, так сказать - независимый взгляд, сравнить его со своим мнением. А так… Пишите ещё чаще, ещё больше, и ещё интереснее.. Спасибо!

    6. JawsIk пишет:

      29.09.2008 @ 16:23

      Для MoneyCraft: Ну во всех, которые у меня были работает... пробуйте... вносите предложения или исправления

      Для Постоянной читательниы: Тут понимаете дело в том, что политика и международные события - это достаточно обширная тема. Меня очень много волнует, что-то раздражает, а что-то откровенно бесит. Я давно уже понял, что Америка подыхает, и то что с Южно-Осетинским конфликтом вся хвалёная пендосовская армия лоханулась. И естественно, что вся европа (их СМИ) обосрались, потому что, как сказали недавно в камеди-клаб ... "дык европа уже давно не европейская, а американская". Всё это гадость и грязь, при этом грязь, которую нам пытаются навязать пендосы. Мы очень стоийкие и терпеливые (русские). И если мы будем работать с дипломатами-дипломатично, а врагам бить по морде и показывать зубы, то в ближайшее время мы станем достойным лидером этого мира. Это очень радует, потому что по языческо-земному расположению, территория Россия находиться на сердце земли, а территория Америки - на пищеварительной системе...
      В общем это очень обширная тема, она никак не пересекается с принятой и устоявшейся здесь тематикой и поэтому я не обсуждаю такие вещи на своём блоге.
      Успехов вам!

    7. Renar пишет:

      02.10.2008 @ 20:20

      JawsIk, ты зря отвечал. "Постоянная читательница" это спамер. Очень похожие коментарии ниочем много раз встречал в блогах.

    8. JawsIk пишет:

      03.10.2008 @ 21:44

      Спасибо Ренат, учту... в любом случае, другие тоже прочтут и не будут задавать почему я в этом дневнике не пишу про политику.

    9. Ted_Baker пишет:

      07.10.2008 @ 22:18

      Очень полезная информацмя

    10. amxm пишет:

      07.10.2008 @ 23:43

      Спасибо, помогли с субмитом disabled /enabled

    11. JawsIk пишет:

      19.10.2008 @ 15:58

      Жаль, если это тоже были спамеры, а если нет, то без проблем... пользуйтесь

    12. WiciN пишет:

      17.11.2008 @ 10:57

      Да, штука полезная, только если хоть один checkbox по умолчанию "checked" то submit не включается.

    13. JawsIk пишет:

      26.11.2008 @ 00:00

      Очень даже может быть... ну значит нужно изначально циферки добавлять, мол сколько галок стоит и тогда будет работать. По умолчанию checkobj = 0 , ну поставь там к примеру checkobj = 2 , если пару галок стоит у тебя.

    RSS подписка на комментарии к этой статье

    Оставить комментарий

    Потребление памяти: 8.56MB