как сделать так чтобы кнопка не нажималась если в поле ничего не ввели? model.php Код (Text): /* === Поиск === */ function search(){ $search = clear($_GET['search']); $result_search = array(); // результат поиска if(mb_strlen($search, 'UTF-8') < 3){ $result_search['notfound'] = "<div class='error_search'>Поисковый запрос должен содержать<br /> не менее 3-х символов!</div>"; }else{ $query = "SELECT goods_id, name, img, anons_list, anons, price, hits, new, sale, articul FROM goods WHERE MATCH(name, keywords, articul, anons_list, anons, content) AGAINST('$search*' IN BOOLEAN MODE) AND visible='1'"; $res = mysql_query($query) or die(mysql_error()); if(mysql_num_rows($res) > 0){ while($row_search = mysql_fetch_assoc($res)){ $result_search[] = $row_search; } }else{ $result_search['notfound'] = "<div class='error_search'>По Вашему запросу ничего не найдено!</div>"; } } return $result_search; } /* === Поиск === */ controller.php Код (Text): case('search'): // Поиск $result_search = search(); // параметры для навигации $perpage = PERPAGE; // кол-во товаров на страницу if(isset($_GET['page'])){ $page = (int)$_GET['page']; if($page < 1) $page = 1; }else{ $page = 1; } $count_rows = count($result_search); // общее кол-во товаров $pages_count = ceil($count_rows / $perpage); // кол-во страниц if(!$pages_count) $pages_count = 1; // минимум 1 страница if($page > $pages_count) $page = $pages_count; // если запрошенная страница больше максимума $start_pos = ($page - 1) * $perpage; // начальная позиция для запроса $endpos = $start_pos + $perpage; // до какого товара будет вывод на странице if($endpos > $count_rows) $endpos = $count_rows; break; сама форма Код (Text): <form method="get"> <ul class="search-head"> <input type="hidden" name="view" value="search"/> <li><input type="text" name="search" id="quickquery" placeholder="Что вы хотите купить?" /> <script type="text/javascript"> //<![CDATA[ placeholderSetup('quickquery'); //]]> </script> </li> <li><input type="image" class="search-btn" src="<?=TEMPLATE?>images/search-btn.jpg" /></li> </ul> </form>
Попробуйте в инпут, который окошко для ввода, добавить атрибут required="true". Браузер просто не даст отослать форму на сервер, пока в инпуте не будет хоть что-нибудь введено. То есть кнопочка-то будет нажматься, но это будет приводить лишь к сообщению "заполните это поле!". А сервак будет тихо мирно себе ждать нормальный запрос.
а можно другим способом выводить сообщение, вместо placeholder="Что вы хотите купить?", чтобы не была такая жопа и как мне проверить js если поиск построин не по js?
Старый добрый javascript... Пишем там все необходимое, а при событии onClick делаем свое дело, чистим поле если не равно Что вы хотите купить?, или еще как то, твое дело.Думаю разберешься как правильно сделать. Смотрим твой код, немного начинаем думать... Если у тебя простая кнопка да еще с типом image то значить сабмит формы происходит через js и еще как кажется там ajax.Перед сабмитом проверяем что пользователь что то ввел.
спасибо щас все попробую) Добавлено спустя 4 минуты 54 секунды: Вот скрипт но если честно я в скриптах не очень)) Поможете? Где вписать onClick? Код (Text): function placeholderSetup(id) { var el = ge(id); if(!el) return; if(el.type != 'text') return; if(el.type != 'text') return; var ph = el.getAttribute("placeholder"); if( ph && ph != "" ) { el.value = ph; el.style.color = '#37424b'; el.is_focused = 0; el.onfocus = placeholderFocus; el.onblur = placeholderBlur; } } Добавлено спустя 46 секунд: Также и... Код (Text): function placeholderFocus() { if(!this.is_focused) { this.is_focused = 1; this.value = ''; this.style.color = '#37424b'; var rs = this.getAttribute("radioselect"); if( rs && rs != "" ) { var re = document.getElementById(rs); if(!re) { return; } if(re.type != 'radio') return; re.checked=true; } } } function placeholderBlur() { var ph = this.getAttribute("placeholder") if( this.is_focused && ph && this.value == "" ) { this.is_focused = 0; this.value = ph; this.style.color = '#37424b'; } }
А че это за куски джава кода? Я хз что это ты мне показываешь Создай отдельную функцию, напиши как тебе надобно и вызывай. Сори мне сейчас не до этого, мож кто то и напишет за тебя подожди немного... Я дал тебе направление, попробуй.
Java!=JavaScript; Плейсхолдер как раз и задуман, чтобы в пустом поле ввода показывалась подсказка, что туда воодить, но само поле чтобы при этом было пустое. По умолчанию плейсхолдер не может быть отправлен на сервер. Это у вас там какая-то JS-хрень, которая впихивает плейсхолдер в запрос. Предположительно: Добавлено спустя 10 минут 32 секунды: Эти вот пляски с бубном - просто невероятные костыли. У меня, к примеру, в проекте текущем куча форм обычных, пробрасывающих данные через AJAX, при этом нигде не используется такая экзотика, чтобы запрос собирался через JS, минуя сабмит-событие, и сам отправлялся на сервер по клику. Есть же стандартные механизмы для этого. 1) Создал форму. 2) На сабмит формы вешаешь листенер AJAX-овый. Ту же JQuery берешь, делаешь в ней обработку сабмита формы по id. Код (Text): $("#ID_формы").submit 3) Перед запросом сериализуем данные с формы: Код (Text): var data = $("#ID_формы").serialize(); 4) В запрос к передаваемым данным дописываешь data. 5) ... 6) PROFIT! При этом нет никаких костылей, используются только стандартные механизмы, которые ни за что не сунут плейсхолдер в запрос, и тем более не позволят отправить формы с пустыми required-инпутами. Зачем было пытаться решить проблемы, которые уже давным-давно решены? Более того, можно вынести проверку на длину введенного текста на сторону клиента, используя атрибут pattern. Конечно, это не сверхнадежный фильтр, ибо клиент, при желании его обойдет, так что на сервере фильтрация тоже должна стоять. Но количество холостых запросов к серверу он заметно снизит. Щас глянул ваш код, так и есть: 1)var el = ge(id); 2) var ph = el.getAttribute("placeholder"); 3) el.value = ph; И вот накойчерт тогда нужен плейсхолдер, скажите? Не проще ли просто при создании формы, сразу ей Value вбивать?
Спасибо за просветление, а то не знал (сарказм) По моему ты его вообще грузанул. Как мне кажется код там готовый ему надо просто проверить что поле заполнено, а он сейчас полезет куда не надо(((
Ну дык, жизнь-боль. Пусть переадресует весь этот груз тому, кто ему этот код "сготовил". Там в инпуте берется плейсхолдер, превращается в велью, потом берется велью и стилизуется под плейсхолдер. В итоге плейсхолдер не плейсхолдер, реквайред не актуален, pattern не применим, зато есть search_btn, которая инициирует отправку запроса, минуя submit-событие. Это вот апофеоз того, что я называю анальной стоматологией.
"placeholder" не работает в некоторых браузерах, по этому я всегда делаю свой для кроссбраузерности. А проверить ввели в поле или нет, помогут события клавиатуры. http://learn.javascript.ru/keyboard-events Сделать кнопку не активной поможет атрибут "disabled". При вводе проверить ввели или нет и если ввели, сделать кнопку активной и убрать "disabled". Яваскрипт поможет вам-это сделать без перезагрузки.
Все правильно. В некоторых. В IE6, например. Который сдох. В то время как 95% пользователей сидят на браузерах, поддерживающих HTML5. Тут же это делается без проверки на браузер в принципе. Я понимаю, что если плейсхолдер не поддерживается, можно сконвертить его в велью. А если поддерживается, можно оставить как плейсхолдер, чтобы браузер сам все правильно сделал. Но тут, согласитесь, немного по-другому происходит. Эти вот костыли, по большому счету, как раз и оставляют на плаву браузеры, не поддерживающие в 2013 году то, что было введено 6(!!!) лет назад. Интернет - это конкуренция. Естественный отбор. Не тянешь? Вон с рынка. Не хочешь "вон с рынка?" сделай в своем браузере функцию обновления и соответствуй современным требованиям. Если бы такой подход практиковался во всем интернете, проблема отпала бы сама собой. Но нет, нам жалко потерять 5% пользователей говнобраузеров, по этому мы, в угоду им, уродуем свои проекты. Вон, вышел IE10, поддерживающий все фичи, которые были в хроме 3 года назад. Ура. Но, он "суперсовременен", как говорят маркетологи, был только на момент выхода. Следующее обновление случится только года через 3. IE - открой интернет заново и закрой обратно.
вот 1 хороший человек из 1 форума написал скрипт и он помог мне Код (Text): function check(text) { var button = document.getElementById("bt"); return text !== "" ? button.disabled = false : button.disabled = true; }
Ну что я говорил ему просто проверить надо было пусто не пусто... Можешь доработать что бы поле при клике очищалось и т.д. и да событие onBlur. Можешь поэксперементировать http://design.originweb.info/dhtml/onblur.html А если 2 пробела?
Да! Йуху! MOAR JS! Чтобы исправить косяки одного скрипта, давайте добавим еще один скрипт! Решение-то было нужно в 2 действия: 1) Выпиливаем строчку placeholderSetup('quickquery'); 2) Добавляем инпуту атрибут required="true" Все. Плейсхолдер будет вести себя как плейсхолдер и браузер сам не позволит отослать пустой запрос. И работать это будет даже при отключенном JS у клиента. Хотя...может браузер и пропустил бы пустое значение, учитывая что у вас там отправка формы магическая, а не сабмитовая(кстати, а нахрена?). Но, конечно, проще чтобы проект обрастал костылями. Костылями для костылей. Заплатками для косяков, порождаемых костылями и тд. Это самый настоящий рак кода.