|
|
|
| Здравствуйте
Есть html-таблица
<div id="pop-up-window">
<table id="search_client">
<tr class="wapka"><td></td></tr>
<tr>
<td class="client_name">[some_text]</td>
</tr>
</table>
</div>
|
и есть форма:
<form>
<input id="fio_txt" type=text value="">
</form>
|
таблица генерируется, заполняется данными из БД
я хочу сделать, так что бы я кликал по нужной строке таблицы, и данные с этой строки заполняли нужные текстовые поля в форме
вот, я тут что-то пытался накидать, но так в итоге не получилось этого добиться:
$('#pop-up-window #search_client tr').click(function(){
if ($(this).attr('class') != 'wapka')
{
var id_client_str = $(this).attr('id'); // tr_355
var id_client = id_client_str.substr(3);
var contract = '#add_contract #add_good ';
var nameInput = document.getElementById(contract.'#fio_txt');
nameInput.value = $(this).next('.client_name');
}
});
|
я хочу добиться того, что бы some_text был помещен в value объекта input с id="fio_txt"
т. е. нужно в текущей строке, по которой клацнули $(this) выбрать нужный td(с этим тоже проблем нету) и вытащить текст который находится между тэгами td(а вот с этим уже проблемы)
З.Ы.
у меня возникла идея, как можно еще решить данную проблему, но только я не знаю, как можно получить текущий адрес страницы, потом я добавлю к ней параметр, и нужно будет перейти по новому адресу, страница перезагрузится, и получит параметр, исходя из котого сразу заполнит нужные поля | |
|
|
|
|
|
|
|
для: zevs
(14.02.2013 в 14:20)
| | $('#pop-up-window #search_client tr') - зачем так много перечислять?
Взять из одной ячейки и поместить в одно поле формы и все, или из произвольной ячейки таблицы в связанное с ней поле?: В таком случае каким образом они связаны? | |
|
|
|
|
|
|
|
для: zevs
(14.02.2013 в 14:20)
| | Я что-то не пойму в чем проблема?
/*<?*/
$('#search_client td.client_name').on('click',function(){
$('#fio_txt').val($(this).text())
})
| Это для заполнения при клике по ячейке.
Если надо при клике по строке, то:
/*<?*/
$('#search_client tr').on('click',function(){
$('#fio_txt').val($(this).find('.client_name').text())
})
|
Или я что-то не понял? | |
|
|
|
|
|
|
|
для: Sfinks
(15.02.2013 в 08:51)
| | О огромное тебе спасибо!!!!
Всё верно понял, просто нужно все ячейки в строке, расфасовать по нужным text-элементам, ну в общем я по-аналогии думаю разберусь как извлечь другие ячейки.
Я просто в js не силён, и многие функции не знаю | |
|
|
|
|
|
|
|
для: zevs
(15.02.2013 в 11:21)
| | Если речь о ячейках, то так делать не стоит, в плане именования и обработчика. | |
|
|
|
|
|
|
|
для: confirm
(15.02.2013 в 11:29)
| | а как по-вашему будет лучше? | |
|
|
|
|
|
|
|
для: zevs
(15.02.2013 в 11:40)
| | Ни как лучше, а как требуется. Вам привели пример, который является такой же хренью, что и ваш код, и вы это проглотили. Хотя ответившему вам, это не к лицу, с его знаниями.
Первое - это именование как ячеек таблицы, так и полей формы, и именование должно быть связанным, и не таким вычурным методом должно связываться как это делаете вы.
Второе - прежде чем решать задачу, нужно определиться с тем, что нужно делать. У вас этого не понять - зачем щелкать по строке, если требуются ячейки? А если все таки щелчок по строке, то почему у вас нет при этом выбора всех ячеек?
Так что сперва опишите четко свою задачу, и только потом появится ее решение. | |
|
|
|
|
|
|
|
для: confirm
(15.02.2013 в 11:46)
| | ну я же вроде описал:
Есть html-таблица
При клике по какой-либо строке, нужно все её ячейки раскидать по text-полям
А именно, что конкретно у меня:
html-таблица заполнена данными клиентов, ФИО, телефон, адрес и т. п.
По одной строке на каждого клиента.
Я выбираю нужного мне клиента(нужную мне строку tr) и кликаю по ней
Все поля(ячейки) нужно перенести в форму, в текстовые поля, для дальнейших операций(ну а там дальше с php-скриптом проблем не должно возникнуть) | |
|
|
|
|
|
|
|
для: zevs
(15.02.2013 в 11:56)
| | >При клике по какой-либо строке, нужно все её ячейки раскидать по text-полям
Ячейки, это коллекция, как как и строки таблицы являются коллекцией. Значит ваш обработчик должен перебирать коллекцию ячеек и по связанным именам распределить их в форму. Но, что значит в форму - у вас форма имеет на каждую строку таблицы связанные поля формы?
Вы не задачу описали, а то что должно выполняться в частности. Именно так это можно оценивать, а можно и предполагать.... А чтобы не было предположений, вы должны описывать задачу. | |
|
|
|
|
|
|
|
для: confirm
(15.02.2013 в 12:05)
| | >Ячейки, это коллекция, как как и строки таблицы являются коллекцией. Значит ваш обработчик должен перебирать коллекцию ячеек и по связанным именам распределить их в форму. Но, что значит в форму - у вас форма имеет на каждую строку таблицы связанные поля формы?
>
>Вы не задачу описали, а то что должно выполняться в частности. Именно так это можно оценивать, а можно и предполагать.... А чтобы не было предположений, вы должны описывать задачу.
tr-элемент имеет id, соответствующий id извлеченной строке из БД
td-элементы я тоже назвал классом нужным, которые будут соответственно помещаться определенная ячейка, с определенным классом в определенный text-элемент c определенным id
по сути товарищ Sfinks, всё правильно сделал, как раз то что мне нужно | |
|
|
|
|
|
|
|
для: zevs
(15.02.2013 в 14:42)
| | Использовать класс в качестве селектора, это крайняя возможность, если иного нельзя. В вашем случае этого вполне можно избежать. Я потому и начал разговор с именования. Но чтобы именовать, надо определиться с тем, что и для чего.
Представьте себе, что у меня есть таблица со многими записями о пользователях. И я делаю так, как вы пишите - выбираю строку, заполняю форму. Если я выберу следующую строку таблицы, то прежние данные формы будут уничтожены, и заполнятся новыми.
В этом случае я буду именовать ячейки таблицы и поля формы удобным для этого случая образом.
Но я могу изменять записи о пользователях не по одному, а по несколько сразу, то есть, либо я динамически при этом добавляю поля в форму и заношу в них данные из выбранной строки, либо такие поля уже прописаны в форме и соответствуют числу строк в таблице. В этом случае именовать элементы я буду совсем иным способом.
А от именования элементов этих будет зависеть обработчик. А чтобы не писать такой бедлам как у вас, нужно с этим определиться изначально, и не просто ткнув пальцем в небо, а подойти к этому вопросу серьезно. А этот подход будет как раз и определять ваша задача, которую вы так и не можете до сих пор описать. | |
|
|
|
|
|
|
|
для: confirm
(15.02.2013 в 14:55)
| | Ну так, я к классу обращаюсь, конкретно в текущей коллекции(строке)
Класс у меня получается - колонка таблицы, вот и получаю конкретные координаты | |
|
|
|
|
|
|
|
для: zevs
(18.02.2013 в 10:35)
| | Значит так:
Таблица ваша имеет id, именно по этому id нужно и обращаться к ней, делегируя обработку щелчков по ее дочерним элементам TR. Обработчик же должен получать коллекцию элементов TD этого TR, а коллекция это массив, а массив, это индексы. Остается брать каждый элемента этого массива, и по его индексу обращаться к элементу формы, в который помещаться содержимое этого элемента массива (TD). Если у вас информация, например, в трех ячейках, то даже цикла не требуется, можно и тремя строками прописать, для каждого индекса индивидуально.
Кроме этого - если речь о пользователях, то это означает их id, и именно это id должно быть определяющим, тем более, если с этими данными предполагается более серьезные манипуляции. И эти ID как раз и должны определять имена родителей - строки таблицы (TR каждого пользователя), а не издеваться по "wapka".
В этом случае именовать ячейки таблицы вообще нет необходимости, и какие имена будут у вашей формы, рояли не играют.
А за обращение к элементу по его классу тогда, когда можно спокойно обойтись без этого, нужно быть по руками, и очень больно. Так что то, что вы напрограммили, и что вам посоветовали, в помойку. | |
|
|
|
|
|
|
|
для: confirm
(18.02.2013 в 10:50)
| | > ..... а коллекция это массив, а массив, это индексы. Остается брать каждый элемента этого массива,
> и по его индексу обращаться к элементу формы .....
Не соглашусь с Вами.
А если через какое-то время придется поменять местами столбцы? Или попросят добавить столбец с нумерацией строк? Или еще что-то подобное?
Перелопачивать и править весь код? Потом искать где что упущено и откуда лезут ошибки?
И все ради чего? Ради экономии нагрузки на процессор конечного пользователя? Благо современные процессоры позволяют не особо запариваться на эту тему.
Сэкономить нагрузку сузив круг поиска, например написав не $('.my_class'), а $('#main input.my_class') - это хорошо. Но работа напрямую с числовыми индексами может крайне негативно сказаться на скорости разработки (доработки/переработки), а следовательно на стоимости, а следовательно на конкурентноспособности разработчика.
И трудозатраты будут намного больше, чем процессороэкономия. | |
|
|
|
|
|
|
|
для: Sfinks
(18.02.2013 в 14:12)
| | Меняйте на здоровье, но если вы обеспокоены этим, перелопачиваете постоянно код, то:
во-первых, не так и трудно-затратно привести в соответствие, к тому же, прежде чем что-то выдумывать, надо хорошо представлять сперва что делаем. Определятся как выгоднее нужно не потом, когда все готово, а на самой ранней стадии. Ну и не вам объяснять, что таблицы "рисуются" сервером динамически, на основе строки параметров, а не автором кода руками шариковой ручкой, то есть изменить порядок в одной строке, и порядок (если захочется) полей формы, это далеко от понятия "весь перелопачивать". А вот необдуманность, как раз и есть причина "перелопачивания";
во-вторых, вам никто не запрещает предопределенную индексацию, что практически не далеко он идентификации;
в третьих, вам кто-то запрещает, или я отговариваю от использования идентификаторов?
И запомните что $('.my_class'), что $('#main input.my_class'), это все равно плохо, просто второе слегка облегчает работу.
Ну и последнее, компьютер не прорва, компьютер это ресурсы, а вы так самоуверенно говорите о "глупостях ради эфемерной экономии", о "производительности", которую вы вряд ли когда оценивали. Ну тут в первую очередь, для начинающих, главное научится заставлять себя задумываться, учится представлять задачу, тем более в таком "разношерстном" ПО как веб-приложение. Это не просто зарядка для мозгов, это самодисциплина, это и стиль, которые пусть медленно, но уверенно будут учить оптимизации.
Ваши же доводы, которые поверхностные, сводятся к одному - а написали мужики "волшебную шкатулку", и как многие к сожалению думают, подменяющую JS, да что там JS, и о DOM можно не задумываться - запустил руку в шкатулку, вытащил что-то под руку попало, прицепил, пашет, и трава не расти.
Слава богу, что большая масса программистов так к программированию не походит, иначе бы вы на своем мощнейшем процессоре только бы и могли что в тетрис гонять, на другое бы ресурсов не хватало. | |
|
|
|
|
|
|
|
для: confirm
(18.02.2013 в 14:46)
| | > Ваши же доводы сводятся к одному - а написали мужики "волшебную шкатулку" ...
Очень жаль, если то что я написал, действительно выглядит именно так.
Само собой, что понимать что откуда растет и думать что для чего и грамотно проектировать необходимо.
Я имел ввиду, что с оптимизацией не нужно перебарщивать. И привязка к числовым индексам в коллекции - это и есть перебарщивание. Написали бы Вы, что нужно каждой ячейке дать идентификаторы на основе ID пользователя, типа imya_123, familiya_123, adres_123 - я бы слова не сказал. Но не индексы. Работоспособность программы обязана НИКАК не зависеть от способа отображения информации.
А запроектировать все заранее не всегда возможно. Очень часто клиент сам толком не знает, каким он хочет видеть результат. И вот только когда увидит хоть что-то, тогда начнет вносить свои поправки. | |
|
|
|
|
|
|
|
для: Sfinks
(18.02.2013 в 15:35)
| | >Я имел ввиду, что с оптимизацией не нужно перебарщивать.
Не перебарщивать, а думать об оптимальном решении задачи.
Это - >И привязка к числовым индексам в коллекции - это и есть перебарщивание. Написали бы Вы, что нужно каждой ячейке дать идентификаторы на основе ID пользователя, типа imya_123, familiya_123, adres_123 - я бы слова не сказал.
как раз порождает вот такое - Очень жаль, если то что я написал, действительно выглядит именно так.
А вы знаете, что есть в JS методы работы с таблицей? Как вы думаете, что выгоднее задействовать эти методы, а затем напрямую обратиться к элементам формы, или же использовать надстройку в виде jQuery? А вы когда либо в исходный код jQuery заглядывали?
jQuery - это всего лишь инструмент, и пользоваться им как и любым инструментом нужно грамотно, а не всегда использовать его там, где в нем нет никакой необходимости. Это вам ответ на - привязка к числовым индексам в коллекции - это и есть перебарщивание. Это вы уже просто глупость сморозили.
>Работоспособность программы обязана НИКАК не зависеть от способа отображения информации.
Я и не говорил, что не работоспособен ваш код, я говорю об его неэффективности, о безрассудном отношении к ресурсам. Если бы код, это была одна такая строка и все, но это не так, ибо привычка писать так, порождает код который написан так весь - в каждой второй третьей, а может и в каждой строке которого головотяпство - работает да и хрен с ним.
А этот хрен, мне как пользователю, вполне возможно, придется открывать, а что такое множество открытых закладок браузера, и сколько они кушают ресурсов, да еще если код написан по "вашей философии", могу предложить просмотреть в диспетчере ресурсов компьютера.
Вот вам и ответ на все ваши доводы.
>И вот только когда увидит хоть что-то, тогда начнет вносить свои поправки.
Уже не будет править, можете прочесть выше - то что вы написали, он принял как план к действию. А если ребенка учить с детства держать ложку неправильно, то вполне возможно он ее будет держать так всю жизнь, хотя будет видеть что остальные держать ее иначе.
Задумывайтесь всегда над тем, что вы советуете, а не так как вы сами пишете - "не думаю, вижу и пишу". Так как вы делаете это в другом разделе, вот там есть разумный подход, там есть предпосылки для того, чтобы человек подумал. Здесь же вы оказываете непонимающему медвежью услугу, и оправдываете ее надуманными проблемами. | |
|
|
|
|
|
|
|
для: confirm
(18.02.2013 в 15:58)
| | Оченьмногавукаф =)
Забыл, что Вас в чем-то переубедить не возможно.
Вы все-равно останетесь при своем мнении. А я в этом конкретном вопросе при своем.
Так что проехали =) | |
|
|
|
|
|
|
|
для: Sfinks
(18.02.2013 в 16:07)
| | >Оченьмногавукаф
Вот именно, много, и если бы код состоял из одной строки, да и бог с ним, но код это гораздо больше чем одна, и чем они бездарнее эти строки в плане кода, тем хуже это для пользователя.
Я вас совсем не собираюсь переубеждать, делайте как вам нрвится, просто не советуйте того, что не допустимо советовать. И все таки задумывайтесь - а всегда ли они нужны имена, идентификаторы... И помните, каждый символ это как минимум один байт "скушан". | |
|
|
|
|
|
|
|
для: confirm
(18.02.2013 в 16:18)
| | Все очень просто: форум (по крайней мере этот) - то место, где ваша логика: "сушествует два мнения - мое и не правильное" не работает. Больше того - не всем нужно объяснение, что они неучи, ниче не смыслят и все делают не правильно. Поэтому высказываются (предлагают решение) все подряд, каждый в меру своих знаний, способностей и т.п. Это и есть живой форум. Если у вас есть лучшее решение, никто вам не запрещает его предложить. В этой же теме вы все разнесли в пух и прах но решения так и не предложили. И не говорите, что не предложили, потому что изначально не верно поставлена задача. Все это уже поняли. Лучше спросите у ТС, понял ли он из всех ваших высказываний что-нибудь кроме того, что все делают всё не правильно. | |
|
|
|
|
|
|
|
для: Sfinks
(18.02.2013 в 16:31)
| | А я разве кого-то назвал неучем?
Что остального, то просто предложил автору подумать, это главное. Но вот думать после медвежей услуги вряд ли кто будет, понимаете в чем проблема. Я и не говорю, что вы не имеете права писать свое, я сказал автору, что его код и ваш никуда не годится в данной ситуации.
Это уж вы стали защищать свою точку зрения, а я лишь парирую. )
Беда всех начинающих как раз в том, что они хватают "поверхностное" и хорошо бы это было временное явление, на первом этапе. Увы, и жаль, но это не так. Мне тут один "корифей" уже писал - "бесполезно меня переделывать, уже привык". У меня и в мыслях такого не было, но вот вам факт.
А отцами таких фактов как раз являемся мы с вами. Так что реплика "сушествует два мнения - мое и не правильное" не ко мне. Я не сторонник навязывать свое мнение, это бесполезно, когда бесполезно, я сторонник метода "подумать", а не подсовывать готовое, которое не всегда кстати. | |
|
|
|
|
|
|
|
для: confirm
(18.02.2013 в 16:42)
| | Пардон. Что-то я сорвался и сам не заметил. | |
|
|
|
|
|
|
|
для: confirm
(15.02.2013 в 11:46)
| | > Ни как лучше, а как требуется. Вам привели пример, который является такой же хренью, что и
> ваш код, и вы это проглотили. Хотя ответившему вам, это не к лицу, с его знаниями.
Я в 99% случаев не разбираюсь "зачем", "какова изначальная задача", "в чем ошибки проектирования" и тд и тп и откуда растут ноги. А просто по предложенным условиям предлагаю решение. Подходит оно или нет пусть решает каждый сам для себя =) | |
|
|
|
|
|
|
|
для: Sfinks
(15.02.2013 в 12:32)
| | А зачем тогда пишите? По принципу лишь бы ляпнуть?
Вот отвечая разделе MySQL, вы грамотно описываете запрос, который предлагаете. При этом зачастую дополняя его рекомендациями, как лучше бы было, если то-то и то-то.... И это правильно.
Но зачем поступать так безалаберно здесь, если видно же, что исходный код полный бардак? Зачем этот бардак дополнять еще?
Человек обязан шевелить мозгами, и первое, это пусть поставит задачу, или опишет ее. Вот тогда и можно советовать что-то, если автор не в состоянии. А скакать по темам рассовывая свои коменты ради оставить след, так к чему это? | |
|
|
|
|
|
|
|
для: confirm
(15.02.2013 в 12:38)
| | Я предполагаю, что исходный код у человека другой, а в теме человек приводит его сокращенный фрагмент. И вполне вероятно, что в рамках всего проекта нужно сделать именно так. Разбираться со всей кучей, которую чел счел незначительной и не стал выкладывать, нет никакого желания. Так вот если этого фрагмента достаточно для решения поставленной задачи, то я отвечаю.
В MySQL - там другое.... Там почти всегда ТС вообще не понимает, либо понимает очень смутно, как работает SQL. Приходится разжовывать.
Кроме того, спасибо конечно за лестный отзыв о моих знаниях, но в JS они не на столько глубоки, чтобы однозначно сказать "Так делать категорически противопоказано". Тут я именно отвечаю в меру своих познаний.
Так вот и учимся =) | |
|
|
|
|
|
|
|
для: Sfinks
(15.02.2013 в 13:01)
| | Нет, не достаточно этого фрагмента, так как он ошибочен изначально, и вы продолжаете эту ошибку немного лишь подправив ее. | |
|
|
|
|