Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Узнать, id списка (https://javascript.ru/forum/events/45000-uznat-id-spiska.html)

kukush 10.02.2014 14:36

Узнать, id списка
 
Добрый день.
есть список
<ol id="selectable">
<li class="of" id="00"></li>
<li class="of" id="01"></li>
<li class="of" id="02"></li>
...

тестовое поле
<input type="text" id="flag" size="40">


есть скрипт
$(document).ready(init);

function init(){
    $(function(){
	$('#selectable')
	    .bind("mousedown", function(e) {e.metaKey = true;})
		.bind("click", function () {$('.of').click(function() {txt=$('#flag').val(); $('#flag').val(txt + this.id);})})
	    .selectable();
    });
};


CSS
#selectable .ui-selecting,
#selectable .ui-state-default { background: #5384ae; }
#selectable .ui-selected { background: #5384ae; color: white; }
#selectable .ui-selected-true { background: #5384ae; color: white; }
#selectable { list-style-type: none; margin: 0; padding: 0;}
#selectable li { margin:1px; ;padding: 1.1px; float: left; width: 15px; height: 15px; font-size: .9em; text-align: center; background: #dfeffc; }

при каждом клике в текстовое поле должен быть записать id выбранного пункта li.
есть две проблемы:
1. сейчас записывается id столько раз, сколько я сделал кликов по пунктам. например, первый клик = одной записи, второй клик = двум записям и т.д.
2. вторая проблема если выбрать несколько пунктов одним кликом (перетаскивая мышь), id в текстовое поле вообще не пишутся, а должны попасть все.

danik.js 10.02.2014 15:02

Цитата:

Сообщение от kukush
$(document).ready(init);
 
function init(){
    $(function(){

Сам то понимаешь че пишешь? $(function(){}) - это алиас $(document).ready(). То есть ты, значит, пишешь:

$(document).ready(function(){$(document).ready(...)})

Про логику слыхал, не?
Цитата:

Сообщение от kukush
.bind("click", function () {$('.of').click(function() {txt=$('#flag').val(); $('#flag').val(txt + this.id);})})

Тут ты понимаешь че делаешь? При каждом клике вешаешь еще один обработчик клика. В итоге обработчики плодятся как тараканы. Кажется на это ты и жалуешься. Ну дык нафига тогда так пишешь?
И кстати, че эт ты в одном случае пишешь .bind('click'), а в другом .click() ?
И между прочим bind() устарел.

kukush 10.02.2014 15:12

не досмотрел тут от старой попытки осталось.
Сообщение от kukush
$(document).ready(init);
 
function init(){
    $(function(){


на счет click и bind пока у меня по другому не получается реализовать...
я собственно и спросил как можно эту неправильную конструкцию изменить

рони 10.02.2014 15:18

kukush,
пример подсчёта выделенных пунктов -- у человека целый плагин получился --
Класс выделения элементов. Нужна критика.
в этот код легко добавить вывод id

kukush 10.02.2014 15:28

спасибо, буду разбирать

рони 10.02.2014 16:00

Цитата:

Сообщение от рони
в этот код легко добавить вывод id

:write:
само выделение конечно с вопросами.

kostyanet 17.02.2014 04:33

Цитата:

есть две проблемы:
Ровно 1. jquery. Нормальному человек никогда не понять этот бред на жиквери, но мучаясь от сознания собственной он все равно прёцца качать, ставить и писать на несусветном языке. В результате чего и.

kostyanet 17.02.2014 04:39

Общая схема такова. В некий объект валятся ссылки на элементы после щелчков. После каждого скрипт должен попытаться найти такой элемент в объекте и, если такого нет - новый, добавить, отразить; если такой есть - ничего не добавлять, отражено.

Применительно к обычному массиву это было бы

var id = arr.indexOf(clicked.elem.id;
if(id<0)
  arr.push(clicked.elem.id)


Если кликнутый должен быть отозван продолжается

else
 arr.splice(id,1);


Часовой пояс GMT +3, время: 22:35.