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

Делаю так:
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
24.10.2012, 11:09:36
    #38011008
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
delete удаляет не то что нужно или странная работа data() в jQ
Весь небольшой код http://jsfiddle.net/tamtakoe/46ZtB/
проблемная строчка в функции additem закомментирована
...
Рейтинг: 0 / 0
24.10.2012, 13:21:58
    #38011301
угумс
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
delete удаляет не то что нужно или странная работа data() в jQ
автор... без громоздких конструкций?
Код: 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
24.10.2012, 14:08:13
    #38011379
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
delete удаляет не то что нужно или странная работа data() в jQ
Вы решили вынести шаблон. Пожалуй так и сделаю.

На счет громоздкости... Если в шаблоне будет пара полей ввода, но только одно из них создает строку, если одна и та же логика будет использоваться с разными шаблонами в разных местах, если редактируемость или удаляемость строк меняется в зависимости от значений в других строках, если позиции строк можно менять местами перетаскиванием, если список нужно будет сохранять и загружать с сервера с помощью json и проч., то боюсь представить что будет, если писать на чистом js
...
Рейтинг: 0 / 0
24.10.2012, 14:54:52
    #38011486
угумс
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
delete удаляет не то что нужно или странная работа data() в jQ
авторНа счет громоздкости... Если в шаблоне будет пара полей ввода, но только одно из них создает строку, если одна и та же логика будет использоваться с разными шаблонами в разных местах, если редактируемость или удаляемость строк меняется в зависимости от значений в других строках, если позиции строк можно менять местами перетаскиванием, если список нужно будет сохранять и загружать с сервера с помощью 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
24.10.2012, 16:27:39
    #38011721
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
delete удаляет не то что нужно или странная работа data() в jQ
Так это все как раз и нужно в моем случае) Прототип на коленке уже давно сделал, тоже на jQ, правда. Теперь пишу плагин, т.к. в нескольких местах будут такие списки использоваться (список контактов и список услуг) и все «если» как раз там и нужны)
Например, чтобы нельзя было удалить контакт, если он единственный подтвержденный и сортировка тоже используются sortable из jQ-ui, так что это уже на чистовую) Думаю, на Гитхаб потом выложить, если руки дойдут
...
Рейтинг: 0 / 0
24.10.2012, 16:51:02
    #38011779
угумс
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
delete удаляет не то что нужно или странная работа data() в jQ
автор http://jsfiddle.net/tamtakoe/46ZtB/...
авторна Гитхаб потом выложить
почему-то, так и подумал ;)))
...
Рейтинг: 0 / 0
26.10.2012, 01:34:03
    #38013931
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
delete удаляет не то что нужно или странная работа data() в jQ
Выложил на github: https://github.com/tamtakoe/livelist
...
Рейтинг: 0 / 0
26.10.2012, 13:53:35
    #38014515
угумс
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
delete удаляет не то что нужно или странная работа data() в jQ
а где нужно постучать, что бы заработало?
...
Рейтинг: 0 / 0
26.10.2012, 17:32:31
    #38015035
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
delete удаляет не то что нужно или странная работа data() в jQ
У меня пример работает: http://tamtakoe.github.com/livelist/
...
Рейтинг: 0 / 0
27.10.2012, 10:20:29
    #38015453
угумс
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
delete удаляет не то что нужно или странная работа data() в jQ
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
27.10.2012, 18:39:07
    #38015684
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
delete удаляет не то что нужно или странная работа data() в jQ
Жесть! Форкайте альтернативный вариант)) С такими знаниями js вам бы в команду разработчиков jQuery, чтобы ускорить проект ;)
...
Рейтинг: 0 / 0
28.10.2012, 05:33:02
    #38015934
угумс
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
delete удаляет не то что нужно или странная работа data() в jQ
ИМХО
- jQuery инструмент-помощник разработчику, который знает (хочет узнать) javascript !
Для остальных jQuery - костыль !!!

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


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