2014-11-07 4 views
-2

Мне нужно отслеживать изменение цвета элемента option, и если возникает ситуация, мне нужно изменить цвет элемента select. Например, я отмечаю неактивные среды с цветом #D4D4D4. Мне нужен элемент выбора, который автоматически меняет цвет, если неактивная среда установлена. Как это сделать?Невозможно выполнить функцию с помощью обработчика событий onchange

PS. Если цвет, примененный к элементу выбора, ТОЛЬКО должен применяться к определенным элементам, а не целому, если он расширяется.

Мои в настоящее время не рабочий раствор:

$scope.sel = document.getElementById("environment"); 
    $scope.changeColor = function(){ 
     $scope.sel.style.color = $scope.sel.options[$scope.sel.selectedIndex].style.color; 
    } 
    $scope.sel.onchange = $scope.changeColor; 

    $("#environment > option").each(function(i, el){ 
     el.onchange = $scope.changeColor(); 
    }); 

    $scope.changeOptionColor = function() { 
     $('.form-control option[value="' + $scope.environment + '"]').attr('style', 'color: #D4D4D4'); 
    } 

Related question

UPDATE2:

enter image description here

Как Вы видите две красные стрелки показывает несоответствие цветов из тот же элемент s.

Update3:

Так в нескольких словах, что я пытаюсь сделать: Цвет элемента указываемого первой стрелки должны всегда соответствовать цвету элемента, на который указывает второй стрелкой.

+0

Является ли это Угловая приложение? –

+0

yes ............ –

+0

Где-то на SO была статья, почему вы не должны использовать jQuery (в большинстве случаев), если используете AngularJS. – Regent

ответ

1

Проблема заключается в том, что вы пытаетесь использовать свое представление в качестве своей модели (если элемент выглядит так, а затем измените это). Плохой подход - ваш взгляд всегда должен быть только отражением вашей модели. Если среда неактивна, поместите эту информацию в свою модель и пусть все в вашем представлении будет составлено на основе этой части информации.

Вы также добавляете стили inline через js.

Вот что я рекомендую:

  1. Выяснить, что говорится, что вы имеете дело с (неактивным, активным, и т.д.).
  2. Определите, как стили должны отражать эти изменения в состоянии, и создайте класс css для создания этих стилей (#environment.inactive {}, #environment.active{} и т. Д.).
  3. Создайте значения в своей области (или экземпляре контроллера), которые диктуют состояние, и изменяют эти значения декларативно из представления через директивы (ng-click и т. Д.).
  4. Используйте ng-класс, чтобы создать свой вид на основе состояния, отраженного в модели.
+0

Когда изменился стиль (цвет) варианта, мне нужно отразить это изменение, изменив цвет элемента select. По умолчанию, даже если опция имеет разный цвет (при выборе расширенного), выбор будет по-прежнему продолжайте отображать его по умолчанию. Является ли это ясным? Нужно ли прикладывать скриншоты? –

+0

Нет, но вам нужно добавить больше кода. То, что вы делаете, очень отсталое - если есть причина, по которой вы так подходите, , это никоим образом не ясно в вашем вопросе. –

+0

Возможно, это объяснит: я должен использовать JSP для генерации выбора и его опций. Затем я могу играть с AngularJS и jQuery. –

0

Вы могли бы рассмотреть вопрос об использовании директивы нг-класса, чтобы динамически устанавливать класс на вашем элементе, а не JQuery https://docs.angularjs.org/api/ng/directive/ngClass

<div id="environment" ng-class="{{changeColor()}}"/> 

$scope.changeColor = function(){ 
    return someColorClass; 
} 
+0

Затем мне нужно разобрать уже сгенерированные (по JSP) параметры и связать их как-то с угловыми переменными, может быть, массив булевых? –

Смежные вопросы