Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Некорректное выполнение условий функции (https://javascript.ru/forum/jquery/53916-nekorrektnoe-vypolnenie-uslovijj-funkcii.html)

VANIAN 24.02.2015 01:50

Некорректное выполнение условий функции
 
Вложений: 1
Есть объект, к которому применяется определенный класс в зависимости от значения атрибута "data". Задача в том, чтобы реализовать возможность изменения класса при клике на него. Все срабатывает только один раз, при повторном нажатии на объект ничего не происходит, хотя функция favoritecheck значение переменной получает.
Jquery активно изучаю около недели, поэтому самостоятельно разобраться не получается. Буду рад помощи.

<div id="favorite" data="1"></div>

$(document).ready(function () {
    var favorite = $("#favorite").attr("data");  // Присвоение переменной значения из data
    favoritecheck (favorite);  // Направление переменной в функцию favoritecheck
    
    
function favoritecheck () {
    if (favorite == 0) {          // Функция добавляет класс объекту исходя из значения переменной
        $("#favorite").addClass("favorite0");}
    else {
        $("#favorite").addClass("favorite1");};
    //alert(favorite);
};
    
    
$("#favorite").click(function (){
    if (favorite == 0) {favorite = 1} // Изменение значения переменной при клике на объект
    else {favorite = 0};
favoritecheck (favorite);  // Направление переменной в функцию favoritecheck 
});
});

danik.js 24.02.2015 05:24

Фигня какая-то. Выкинь всю эту хрень. Че хочешь сделать то? Какой смысл в изменении атрибута?

рони 24.02.2015 08:47

VANIAN,
в строках 8 и 10 нет удаления иного класса

VANIAN 24.02.2015 15:45

danik.js,
Необходимо, чтобы скрипт присваивал объекту определенный класс на основе значения атрибута data (получаемого из базы данных) еще до клика, а после клика изменял. При этом нужно не просто добавить класс, а изменить переменную, чтобы отправить обновленное значение на сервер. Вот пример example.
Может как-то можно упростить? JQuery изучаю недолго, поэтому не силен в нем.

рони 24.02.2015 16:01

VANIAN,
function favoritecheck () {
    if (favorite==0) {          // Функция добавляет класс объекту исходя из значения переменной
        $("#favorite").removeClass("favoriteAdded");
    }
    else {
          $("#favorite").addClass("favoriteAdded");
        };
};

заменить на

function favoritecheck (add) {
          $("#favorite").toggleClass("favoriteAdded", add);
};

danik.js 24.02.2015 16:28

Так это же чекбокс, просто с нестандартным внешним видом? Вот и отталкивайся от этого. Никакие классы не нужны, ибо :checked.
Смена состояния - событие change. Вместо твоего доклика выставляй checked на сервере, вместо data. Все просто ведь, нахер выдумывать?

VANIAN 24.02.2015 17:24

рони,
Спасибо, подправил, выглядит лаконичней.

danik.js,
Спасибо, с такой возможностью просто пока не знаком.

danik.js 24.02.2015 17:25

Ладно, вариант без checkbox имеет право на жизнь, но мне по душе предложенный мной вариант: http://jsfiddle.net/kd4ef4ok/

VANIAN 24.02.2015 17:31

danik.js,
Спасибо большое, то что нужно!


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