powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / delete удаляет не то что нужно или странная работа data() в jQ
14 сообщений из 14, страница 1 из 1
delete удаляет не то что нужно или странная работа data() в jQ
    #38010995
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Второй час сижу и не могу догнать...

Делаю так:
var $element = $($.fn.item.default.template).clone().data('options', $.fn.item.default)
delete $element.data('options').template

Т.е. беру из дефолтных настроек своего плагина параметры, в том числе тот, который описывает html объекта (template), затем клонирую их в объект, а параметр template удаляю, т.к. элемент уже содержит его в себе. Проблема в том, что параметр удаляется из $.fn.item.default, а не из клона. Почему так и можно это как-то обойти без громоздких конструкций?
...
Рейтинг: 0 / 0
delete удаляет не то что нужно или странная работа data() в jQ
    #38011008
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Весь небольшой код http://jsfiddle.net/tamtakoe/46ZtB/
проблемная строчка в функции additem закомментирована
...
Рейтинг: 0 / 0
delete удаляет не то что нужно или странная работа data() в jQ
    #38011301
угумс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор... без громоздких конструкций?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
<!DOCTYPE html>
<html>
    <head>
		<title></title>
		<meta charset="UTF-8" />
		<script src="http://code.jquery.com/jquery-latest.min.js"></script>		
		<script>
			$().ready(function() {
				var tmpl = '<input type="text" /><span class="close">x<span>';
				
				function createTmpl(tmpl) {
					var li = document.createElement('LI'),					
					parent = document.getElementById('cont'),
					elms = parent.getElementsByTagName('li'),
					iput, span;

					li.innerHTML = tmpl;	
					
					input = li.getElementsByTagName('input')[0],
					span = li.getElementsByTagName('span')[0];					
										
					span.onclick = function() {
						parent.removeChild(li);						
					};					
					input.onkeyup = function() {				
						var last = elms[elms.length - 1],
						prev = elms[elms.length - 2];						
											
						if(this.value != '' && li === last) {
							createTmpl(tmpl);							
						} else if (this.value == '' && li === prev) {
							parent.removeChild(last);						
						}		
					};															
					parent.appendChild(li);
				};
								
				createTmpl(tmpl);				
			})
		</script>	
		<style type="text/css">
			.close {
				cursor: pointer; 
				color: blue;
			}
		</style>
	</head>
    <body>
		<ul id="cont"></ul>
    </body>
</html>
...
Рейтинг: 0 / 0
delete удаляет не то что нужно или странная работа data() в jQ
    #38011379
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы решили вынести шаблон. Пожалуй так и сделаю.

На счет громоздкости... Если в шаблоне будет пара полей ввода, но только одно из них создает строку, если одна и та же логика будет использоваться с разными шаблонами в разных местах, если редактируемость или удаляемость строк меняется в зависимости от значений в других строках, если позиции строк можно менять местами перетаскиванием, если список нужно будет сохранять и загружать с сервера с помощью json и проч., то боюсь представить что будет, если писать на чистом js
...
Рейтинг: 0 / 0
delete удаляет не то что нужно или странная работа data() в jQ
    #38011486
угумс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторНа счет громоздкости... Если в шаблоне будет пара полей ввода, но только одно из них создает строку, если одна и та же логика будет использоваться с разными шаблонами в разных местах, если редактируемость или удаляемость строк меняется в зависимости от значений в других строках, если позиции строк можно менять местами перетаскиванием, если список нужно будет сохранять и загружать с сервера с помощью json и проч., то боюсь представить что будет, если писать на чистом js
не увлекайся ты этими "если" - делай то, что нужно здесь и сейчас! и не бойся ничего...! ;) трудись!
мне, просто, было интересно посмотреть на сколько оправданно использование jQuery в твоём случае - ИМХО - вовсе ненужно!
авторЕсли в шаблоне будет пара полей ввода, но только одно из них создает строку,
как то так...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
$().ready(function() {
				var tmpl = '<input type="checkbox" /><input type="text" /><input data-main="true" type="text" /><span class="close">x<span>';
				
				function createTmpl(tmpl) {
					var li = document.createElement('LI'),					
					parent = document.getElementById('cont'),
					elms = parent.getElementsByTagName('li'),
					iput, span,
					mainInput = function(npts) {
						for(var i = 0, max = npts.length; i < max; i += 1) {
							if(npts[i].getAttribute('data-main')) {
								return npts[i];
							}
						}
					};

					li.innerHTML = tmpl;					
					
					input = mainInput(li.getElementsByTagName('*'));
					span = li.getElementsByTagName('span')[0];					
										
					span.onclick = function() {
						parent.removeChild(li);						
					};					
					input.onkeyup = function() {				
						var last = elms[elms.length - 1],
						prev = elms[elms.length - 2];						
											
						if(li === last && this.value != '') {
							createTmpl(tmpl);							
						} else if (li === prev && this.value == '') {
							parent.removeChild(last);						
						}		
					};															
					parent.appendChild(li);
				};								
				createTmpl(tmpl);				
			})
...
Рейтинг: 0 / 0
delete удаляет не то что нужно или странная работа data() в jQ
    #38011721
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так это все как раз и нужно в моем случае) Прототип на коленке уже давно сделал, тоже на jQ, правда. Теперь пишу плагин, т.к. в нескольких местах будут такие списки использоваться (список контактов и список услуг) и все «если» как раз там и нужны)
Например, чтобы нельзя было удалить контакт, если он единственный подтвержденный и сортировка тоже используются sortable из jQ-ui, так что это уже на чистовую) Думаю, на Гитхаб потом выложить, если руки дойдут
...
Рейтинг: 0 / 0
delete удаляет не то что нужно или странная работа data() в jQ
    #38011779
угумс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор http://jsfiddle.net/tamtakoe/46ZtB/...
авторна Гитхаб потом выложить
почему-то, так и подумал ;)))
...
Рейтинг: 0 / 0
delete удаляет не то что нужно или странная работа data() в jQ
    #38013931
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выложил на github: https://github.com/tamtakoe/livelist
...
Рейтинг: 0 / 0
delete удаляет не то что нужно или странная работа data() в jQ
    #38014515
угумс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а где нужно постучать, что бы заработало?
...
Рейтинг: 0 / 0
delete удаляет не то что нужно или странная работа data() в jQ
    #38015035
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня пример работает: http://tamtakoe.github.com/livelist/
...
Рейтинг: 0 / 0
delete удаляет не то что нужно или странная работа data() в jQ
    #38015453
угумс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
some code
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
<!DOCTYPE html>
<html lang="en">
    <head>
        <title>STOP jQuery</title>
        <meta charset="UTF-8" />	
	<meta name="author" content="угумс">
        <script>		
            function renderTmpl(tmpl, data) {
                var createTmpl = function() {
                    var LI = document.createElement('LI'),	
			SPAN = document.createElement('SPAN'),							
			LIS = UL.getElementsByTagName('LI'),
			elmsMain,
			getMainElms = function(elms) {
				var output = [];
				for(var i = 0, max = elms.length; i < max; i +=1) {
					if(elms[i].name) {
						elms[i].name += '[' + index + ']';
					}
					if(elms[i].getAttribute('data-type') == 'main') {
						output.push(elms[i]);
					}
				}
				return output;
			},
			mainEvent = function(flag) {				
				var lastLI = LIS[LIS.length - 1],
					prevLI = LIS[LIS.length - 2];										
				if(!flag && LI === lastLI) {
					createTmpl();							
				} else if (flag && LI === prevLI) {
					UL.removeChild(lastLI);	
					index--;
				}		
			};
					
                    LI.innerHTML = ttmpl;	
					
                    SPAN.innerHTML = '-';
                    SPAN.className = 'close';
                    SPAN.onclick = function() {
                        if(LIS.length > 1)
                            UL.removeChild(LI);
                    };
                    LI.appendChild(SPAN);
					
                    elmsMain = getMainElms(LI.getElementsByTagName('*'));
                    for(var i = 0, max = elmsMain.length; i < max; i += 1) {
                        switch(elmsMain[i].type)
                        {
                            case 'text':
                                elmsMain[i].onkeyup = function() {mainEvent(this.value == '')};
                                break;
                            case 'checkbox':					
                                elmsMain[i].onclick = function() {mainEvent(!this.checked)};
                                break;
                            default:
                                throw('Wrong type of main element');
                        }							
                    }																		
                    UL.appendChild(LI);
                    index++;
                },
                UL = document.createElement('UL'),
                pattern = new RegExp('{{(.+)}}', 'g'),
                index = 0,
                ttmpl;					
					
                data = data || [];
                this.appendChild(UL);
					
                for(var i = 0, max = data.length; i < max; i += 1) {
                    ttmpl = tmpl.replace(pattern, function(match, p1) {
                        return data[i][p1];
                    });
                    createTmpl();
                }					
                ttmpl = tmpl.replace(pattern, function() {
                    return '';
                });					
                createTmpl();					
            };				
			
        </script>	
        <script>
            window.onload = function() {
                var cont = document.getElementById('cont'),
                data = [
                    {text : 'aaa', tmp : 'bbb'},
                    {text : 'bbb', tmp : 'ccc'},
                    {text : 'ccc', tmp : 'ddd'}
                ];					
                cont.renderTmpl = renderTmpl;
				
                cont.renderTmpl(document.getElementById('tmpl').innerHTML);
                cont.renderTmpl(document.getElementById('tmpl1').innerHTML, data);
                cont.renderTmpl(document.getElementById('tmpl2').innerHTML, data);
            };
        </script>
        <style type="text/css">
            .close {
                cursor: pointer; 
                color: red;
            }
        </style>
        <script type="text/html" id="tmpl">
        <input data-type="main" name="main[simple]" type="text" />		
    </script>
    <script type="text/html" id="tmpl1">
        <input data-type="main" name="main[checkbox]" type="checkbox" />
        <input data-type="main" name="main[text]" value="{{text}}" type="text" />	
        <input name="main[tmp]" value="{{tmp}}" type="text" />			
    </script>
    <script type="text/html" id="tmpl2">
        <label>привет</label>
        <input data-type="main" name="main[tmp]" value="{{tmp}}" type="text" />
        <input value="{{text}}" name="simple[text]" type="text" />
    </script>
</head>
<body>
    <div id="cont"></div>		
</body>
</html>



местами было интересно ;)
...
Рейтинг: 0 / 0
delete удаляет не то что нужно или странная работа data() в jQ
    #38015684
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жесть! Форкайте альтернативный вариант)) С такими знаниями js вам бы в команду разработчиков jQuery, чтобы ускорить проект ;)
...
Рейтинг: 0 / 0
delete удаляет не то что нужно или странная работа data() в jQ
    #38015934
угумс
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИМХО
- jQuery инструмент-помощник разработчику, который знает (хочет узнать) javascript !
Для остальных jQuery - костыль !!!

зы: выбор за тобой! http://progbook.ru/javascript/1170-stefanov-javascript-shablony.html
...
Рейтинг: 0 / 0
delete удаляет не то что нужно или странная работа data() в jQ
    #38016426
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо! Почитаю обязательно!
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / delete удаляет не то что нужно или странная работа data() в jQ
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]