Как заменить заменить поле в форме и отсортировать строки <option>?
Вот моя форма, для примера выкладываю только несколько полей!
<form action="<?=base_url();?>create/<?=$this->session->userdata('user_id')?>" method="post" > <table cellpadding="4" cellpadding="2" align='center' style="margin-top: 10px; vertical-align: top;"> <tr> <td>Страна:</td> <td><select size='1' name='country' id='country'> <option value='-1' selected>Выберите страну</option> <option value='0'>Другая</option> <? foreach($country as $country_id) { echo "<option value='".$country_id['id']."'>".$country_id['country_n']."</option>"; } ?> </select> </td> </tr> <tr> <td>Регион:</td> <td><select size='1' name='region' id='region'> <option value='-1' selected>Выберите регион</option> <option value='0'>Другой</option> <?foreach($region as $region_id) { echo "<option id='".$region_id['country']."' value='".$region_id['id']."'>".$region_id['region_n']."</option>"; } ?> </select></td> </tr> </table> <input type="text" name="t" id="t" style="display: none;"/> </form> Меня интересует 1. Как сделать чтобы при выборе строки "Другая" в поле "Страна" появлялось обычное поле для ввода текста и у него был атрибут "name" = "country" 2. Когда выбираешь страну, мне нужно получить его value и в зависимости от этого значения, нужно оставить строки <option> в поле "Регион" с id, равный этому значению, а другие скрыть! |
Цитата:
Цитата:
|
выложи сюда не фарш, а HTML с отработавшим php
тогда уже можно будет говорить о чем-либо |
Написал вот такой код, для решения первой проблемы, но он почему-то не работает?!
$('#country').change( function(){ if($(this).val() == 0){ $('#country').hide(); $('#t').show().attr({'name':'country'}); } }); А точнее сказать поле input просто появляется на своем месте, а не на месте select! |
С первой проблемой разобрался, но вот со второй по прежнему труности!
Вот такой код на данный момент, скажите что делаю не верно!? // Замена селекта на инпут $('#country').change( function(){ var val_c = $(this).val(); if(val_c == 0){ $('#country').hide().before($('#t')); $('#t').show().attr({'name':'country'}).text('Название города'); } // Сортировка элементов option if (val_c > 0) { var opt_r = $('#region :option[value = '+val_c+']'); var opt = $('#region :option[value > 0]'); $(opt).hide(); $(opt_r).show(); } }); |
оно?
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> <script> $(function() { var form = $('[name="form"]'), array = ['Челябинск', 'Севастополь']; $('select', form).change(function() { $('input', form).removeAttr('disabled').val(array[this.selectedIndex-1]); }); }); </script> <form name="form"> <select> <option value="0">-- выберите --</option> <option value="1">Россия</option> <option value="2">Украина</option> </select> <input type="text" value="" disabled="" /> </form> |
Не это не то!)
Мне нужно чтобы в зависимости от value выбранной страны, в поле <select name='region' id='region' оставались только те <option> у которых id равен value выбранной страны, а остальные <option> должны скрываться за исключением <option value='0'>Другой<option>! Вот к примеру как сделать чтобы при выборе Россия, в поле регион оставались только города с id = '1', а пре выборе Литва, только с id='2'? <tr> <td> <td> <select size="1" name="country" id="country"> <option value="-1" selected="">Выберите страну</option> <option value="0">Другая</option> <option value="1">Россия</option> <option value="2">Литва</option> </select> </td> </tr> <tr> <td>Регион:</td> <td> <select size="1" name="region" id="region"> <option value="-1" selected="">Выберите регион</option> <option value="0">Другой</option> <option id="2" value="2"></option> <option id="1" value="1">Калининград</option> <option id="2" value="3">Сувалкия</option> <option id="2" value="4">Жемайтия</option> <option id="1" value="5">Нижегородская </option> <option id="1" value="6">Воронежская</option> </select> </td> |
|
Я прочитал, там все объяснено на премитивном уровне, это я и сам знаю! А вот как это все совместить с переменными, не создавая никаких масивов с заранее известными строками, я так запарюсь сидеть записывать каждый регион!
И тем более я уверен в том, что все можно сделать гораздо проще и эфективнее! |
Еще раз прочитал и все равно остаюсь на той же точке "Абсолютного непонимания решения моего вопроса"!
|
Цитата:
ИД должен быть уникальным на страничке... Для "группировки" элементов используй например класс. |
Цитата:
Как тогда поступить?! |
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> <script> $(function() { $('[name="form"] select').change(function() { $(this).next('select').removeAttr('disabled').find('option').eq(this.selectedIndex-1).show(1, function() { $(this).attr('selected', ''); }).siblings().hide(); }); }); </script> <form name="form"> <select> <option value="0" selected="">-- выберите --</option> <option value="1">Россия</option> <option value="2">Украина</option> </select> <select disabled=""> <option value="1">Челябинск</option> <option value="2">Севастополь</option> </select> </form> |
window.onload = function () { document.getElementById("country").onchange = function () { var group = document.getElementById("region").childNodes, $val = this.value, i, name; for (i = group.length; i--;) { if (group[i].nodeType !== 1) { continue; } name = group[i].getAttribute("name"); if (name === $val || $val === "-1") { group[i].style.display = ""; } else { group[i].style.display = "none"; } } }; }; <select size="1" name="country" id="country"> <option value="-1" selected="">Выберите страну</option> <option value="0">Другая</option> <option value="1">Россия</option> <option value="2">Литва</option> </select> <select size="1" name="region" id="region"> <option value="-1" selected="">Выберите регион</option> <option value="0">Другой</option> <option name="1" value="1">Калининград</option> <option name="2" value="3">Сувалкия</option> <option name="2" value="4">Жемайтия</option> <option name="1" value="5">Нижегородская </option> <option name="1" value="6">Воронежская</option> </select> |
Цитата:
|
kobezzza написал что-то похожее только хотелось бы, чтобы все при помощи JQuery было сделано, а не на класическом javascript!
|
Цитата:
<!DOCTYPE html> <html> <head> <style> </style> <script> function Go(Typ) { var os=document.getElementById('region') var o=os.options var i for (i=o.length-1; i>-1; i--) { if (o[i].className!=Typ) { os.removeChild(o[i]) } } } </script> </head> <body> <body> <select size="1" name="country" id="country" onchange='Go(this.value)'> <option value="-1" selected>Выберите страну</option> <option value="0">Другая</option> <option value="1">Россия</option> <option value="2">Литва</option> </select> <label for='region'>Регион:</label> <select size="1" name="region" id="region"> <option value="-1" selected>Выберите регион</option> <option value="0">Другой</option> <option class="2" value="2"></option> <option class="1" value="1">Калининград</option> <option class="2" value="3">Сувалкия</option> <option class="2" value="4">Жемайтия</option> <option class="1" value="5">Нижегородская </option> <option class="1" value="6">Воронежская</option> </select> </body> </html> |
Зачем усложнять себе жизнь циклами javascript, JQuery же делает все на автомате, нужно просто задать параметры, вот в этом вся трудность!
|
Хочеш жиквери?) Держи:
$(function(){ $("#country").change(function () { var $val = $(this).val(); if ($val === "-1") { $("#region > option").show(); } else { $("#region > option[name!='" + $val + "']").hide().siblings("option[name='" + $val + "']").show(); } }); }); |
Цитата:
ksa, что-то бредом попахивает)) 1. у option есть нативный метод remove() 2. className откуда? |
kobezzza Еще одна хорошая попытка, но все-равно не вышло!((
|
Как не вышло? Я тестил и у меня вышло)
http://screencast.com/t/wUx43831T - вот доказательство, что всё ок :P |
monolithed Весь сценарий который написал можешь расшифровать, а тоя в английском не селем, прости что запарваю, но если не сложно сделай это пожалуйста!)
|
kobezzza почему у тебя в
option[name стоит name? А мне нужно чтобы он сравнивал допустил с классом этих опшинов! |
Цитата:
|
Скинь исходник страницы плиз!
|
Кидал выше, но на ещё раз:
<select size="1" name="country" id="country"> <option value="-1" selected="">Выберите страну</option> <option value="0">Другая</option> <option value="1">Россия</option> <option value="2">Литва</option> </select> <select size="1" name="region" id="region"> <option value="-1" selected="">Выберите регион</option> <option value="0">Другой</option> <option name="1" value="1">Калининград</option> <option name="2" value="3">Сувалкия</option> <option name="2" value="4">Жемайтия</option> <option name="1" value="5">Нижегородская </option> <option name="1" value="6">Воронежская</option> </select> |
MaxD, есть перевод документации
|
Надо короче немного передохнуть, уже не работает и то что работало!))
Спасибо парни за помощь!)) |
Цитата:
Цитата:
|
Цитата:
|
Какая-то лажа с jquery выборкой, даже когда пишу такую простую конструкцию, как
$('#region > option').hide(); Ничего не происходит!((( |
Проблема еще не решена, парни!))) Нужна помощь, что я не правильно делаю в выборке?!
|
MaxD, видимо задача поставлена верно. найдит другое решение
|
Да я уже кучу перепробовал, но проблема с выборкой!
Даже простой скрипт не убирает поля <option>, вот я и не пойму почему, тут же куча профессоров, что я неправильно пишу?! $('#region > option').hide(); |
попробуй убрать >
|
Все равно не пашет!(( Парни дайте ссылочку, где можно скачать последнюю версию Jquery, я посмотрел, у меня оказывается файл какой-то корявый!))
|
А хотя может и нет!) Не знаю, но почему-то не работает эта выборка((
|
Цитата:
|
<option value="-1" selected="">Выберите регион</option> <option value="0">Другой</option> <option id="2" value="2"></option> <option id="1" value="1">Калининград</option> <option id="2" value="3">Сувалкия</option> <option id="2" value="4">Жемайтия</option> <option id="1" value="5">Нижегородская </option> <option id="1" value="6">Воронежская</option> такого быть не может. пиши им name чтоли. но не id. элемент с идентификатором должен быть уникальным! скрипт лёгкий до ужаса... сам чтоли не мог написать? выложу тут . если что - еще лежит на fiddle Пример: запускай.
<!DOCTYPE HTML> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <select size="1" name="country" id="country"> <option value="-1" selected disabled>Выберите страну</option> <option value="0">Другая</option> <option value="1">Россия</option> <option value="2">Литва</option> </select> <select size="1" name="region" id="region"> <option value="-1" selected="">Выберите регион</option> <option value="0">Другой</option> <option id="2" value="2"></option> <option id="1" value="1">Калининград</option> <option id="2" value="3">Сувалкия</option> <option id="2" value="4">Жемайтия</option> <option id="1" value="5">Нижегородская </option> <option id="1" value="6">Воронежская</option> </select> <script> var sels = { 'country' : document.getElementById('country'), 'region' : document.getElementById('region') }; var database = {}; var currentOption = {}, i, b; for(i = 0; i < sels.country.options.length; i += 1 ) { currentOption.country = sels.country.options[ i ]; database[ currentOption.country.value ] = []; for(b = 0; b < sels.region.options.length; b += 1 ) { currentOption.region = sels.region.options[b] if( currentOption.country.value === currentOption.region.id && currentOption.region.text.length !== 0 ){ database[ currentOption.country.value ].push( currentOption.region ); } }; }; sels.region.style.display = 'none'; sels.region.options.length = 0; sels.country.onchange = function(){ sels.region.options.length = 0; sels.region.style.display = 'inline'; var optionsArray = database[ this.value ], i; for( i = 0; i < optionsArray.length; i += 1 ){ sels.region.options.add( optionsArray[i] ); } }; </script> Внимание! добавление в хеш (читай : соответствие делается так ) currentOption.country.value === currentOption.region.id && currentOption.region.text.length !== 0 т.е. если у них одинаковы value (у страны) и id ( у региона) и если в этой опции есть какой-то текст |
Часовой пояс GMT +3, время: 23:58. |