ILoveYAnny
@ILoveYAnny

Как через jQuery заполнять progressbar в uikit?

Здравствуйте, ничего не могу понять, почему не работает функция
Предположим var field = progressBar1
Вот таким образом, когда я вызываю функцию и передаю через аргумент значение поля - не работе
function changeProgress (field, typeOperation) {
	switch (field) {
	  case "plus":
		field.value += 1;
		break;
	  case "minus":
		field.value -= 1;
		break;
	}
	
}


А вот так, работает..
function changeProgress (field, typeOperation) {
	switch (field) {
	  case "plus":
		progressBar1.value += 1;
		break;
	  case "minus":
		progressBar1.value -= 1;
		break;
	}
	
}


Причём примечательно то, что для Uikit 3, не надо указывать селектор - достаточно прсото указать ID прогрессбара, не обьявляя переменной
  • Вопрос задан
  • 242 просмотра
Решения вопроса 1
gzhegow
@gzhegow
Думал, стану умнее, когда адаптируюсь, но нет
Видишь прикол? Ты изучил технологию uikit, и теперь у тебя возникли новые вопросы.

База прогрессбара в том, что это два обычных дива - один внешний, а один с заполнением, который ты двигаешь в зависимости от переменной, которая изменяется в реальном времени.

Ты управляешь переменной, и событие на изменение переменной заставляет меняться твой прогрессбар.

Судя по твоему коду ты пытаешься в функции обработчике изменить переменную, которой в этой функции не задано. До этого ты писал код в которых объявлял переменную через name = 1; тем самым создавал ГЛОБАЛЬНУЮ переменную, существующую везде на странице.

А uikit использует var name = 1; создавая ЛОКАЛЬНУЮ переменную, доступную внутри конкретной функции и ее потомков.

В твоем случае обработка прогрессбара происходит с помощью другой функции, которая создана (функцию в js тоже можно "воспринимать как переменную") не в том же месте, где и переменная progressbar1, поэтому функция о ней не знает.

Чтобы это обойти, есть пара вариантов:
1) действительно менять через field, поскольку как ты видишь в эту функцию в field передается твой прогрессбар
2) если тебя это смущает, то к вызову функции changeProgress ты можешь дописать changeProgress.call(null, progressbar1);

Метод call ВЫЗЫВАЕТ функцию, подсовывая в нее то, о чем она не знала впереди того, что она знала. Твой changeProgress превратится в
function changeProgress(progressbar1, field, typeOperation) { ... }

и ты сможешь менять как привык

В действительности же изучая новую технологию ты заставляешь себя ПРИВЫКНУТЬ к тому, как она работает, а не пытаться ее изменить. В этом и проблема несовершенной технологии - она поставляется бесплатно, далеко не факт что хорошо работает, и требует от тебя смирения и отсутствия в общем-то мозга - ты просто используешь готовое, как оно есть.

Таким образом, еще раз, твою проблему решит:
1) привыкание к тому что есть, ибо это технология
2) изменение того что есть, но очень скоро ты поймешь, что количество внесенных изменений такое, что тебе проще было ее с нуля написать
3) писать сразу с нуля и не париться, но потом понять, что заказчик не хочет тебе платить за то, что ты будешь "писать с нуля", потому что бизнес-тренера ему навешали лапши про "готовые решения", и тогда вернешься к пункту один и так по кругу

Ищи наиболее удобную для себя позицию - писать с нуля и требовать денег или использовать готовое и не отвечать за результат. И то и другое сделает тебя виноватым в конце концов, а значит по законам современных юристов - должным твоему заказчику (есть например способ "все делать по договору" - это когда ты рассказываешь что типа все будет честно, а на самом деле в договоре указываешь пункт про свободную лицензию устанавливаемых модулей, и в суде ты такой достаешь козырь из кармана - я его предупреждал и не виноват, что он не знает, что такое бесплатная лицензия на готовое решение, just business, nothing more)

Отсюда - ты выбираешь только заказчиков которые это понимают и с этим смирились понимая что ты единственный, кто может за это отвечать и потому тебя никогда не стоит делать дураком. К сожалению, почти все современные заказчики понимают, что ты не единственный, поэтому их суть работы таки доказать тебе, что ты им должен, а потом "работай и не проси прибавки, а то будет суд и заплатишь".

Значит ли это, что на бизнес лучше не работать совсем? Для меня да. Но растить картошку и копать огород, а потом подсесть на очко от того что пришли морозы и весь урожай сдох - тоже так себе подход. Поэтому растишь в себе стержешь и будь готов кидать твоих заказчиков, как только они ведут себя "недостойно", потому что да, заказчик тоже не единственный. Другая крайность - "если бы не было бизнеса" приведет к другому уровню безработицы, когда ни один двоешник не сможет устроится на работу, им придется учится, а им лень, поэтому они начнут грабить посредь бела дня. Текущее решение обеспечивает отсутствие гражданской войны - двоешники - директора, умные - рабы. Умные не выйдут на площадь потому что умные, двоешники обманывают но не грабят, потому что есть возможность и никто не наказывает.

* Не нужно много разбираться в технологиях, чтобы делать простые вещи, технологии испокон веков были средством управления людьми, поскольку мы больны тягой к неизвестному.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы