альтернатива переключения jquery, не мог понять, что здесь происходит - PullRequest
1 голос
/ 14 февраля 2012

Это может показаться вам очень простым, ребята, но я немного новичок в jquery и ajax. Я искал везде и не мог решить проблему часами. Моя проблема заключается в следующем;

У меня есть html-ссылка с именем класса, следующим за

<a href="#" class="follow">  {if $is_following == 0} follow {else} following {/if}  </a>

оператор if-else - это просто умное использование шаблонизатора. это очень просто если пользователь следует за другим пользователем, тогда покажите значение 'follow', иначе покажите значение 'follow'.

Мое jquery следующее;

var $values;
$('.follow').mouseover(
    function()
    {
        $values = $(this).html();
        if($values == 'following')
        {
            $(this).html('unfollow');
        }
    }
);

$('.follow').mouseout(

    function()
    {
        $(this).html($values);
    }
);

$('.follow').toggle(

    function(){
        $(this).html('following');
        $values = "following";
    },
    function(){
        $(this).html('follow');
        $values = "follow";     
    }
);

//follow ajax call    
$('.follow').click(function(){

    var $op = $(this).html();
    var $other_profile_id = $('#other_profile_id').text();

    if($op == 'follow')
    {                   
        $.ajax({
            type : 'POST',
            url : 'ajax_service.php',
            dataType : 'json', 
            data: {
                op : $op,
                other_profile_id : $other_profile_id
            },          
            success : function(data){               

            },
            error:function (error){
                console.error(error.responseText);
            }                                   
        });                 
    }
    else if($op == 'unfollow')
    {               
        $.ajax({
            type : 'POST',
            url : 'ajax_service.php',
            dataType : 'json',
            data: {
                op : $op,
                other_profile_id : $('#other_profile_id').text()            
            },
            success : function(data){
            },
            error:function (error){
                console.error(error.responseText);
            }   
        });
    }
});

РЕДАКТИРОВАТЬ: на основе ответа мне нужно объяснить функциональность;

  • Если пользователь не подписан, ссылка показывает значение «подписаться».
  • Если пользователь уже подписался, показывается значение 'follow', оно должно вызывать событие mouseover, когда мышь находится над ссылкой.
  • Если указатель мыши находится над ссылкой и значение «следует», то значение ссылки должно быть «отписаться».
  • Если на ссылке отсутствует мышь, она должна снова показать значение «после».
  • Если пользователь не подписан, в ссылке отображается значение «подписаться».

Я не хочу использовать событие переключения. Потому что переключатель просто ловит первый и второй щелчок. Мне нужно утверждение if, которое контролирует, является ли значение ссылки следующим или следующим.

Кроме того, если пользователь следует, он показывает следующее значение, но событие mouseover не работает. Не могли бы вы объяснить, почему? Я не мог понять, что здесь происходит.

Любые предложения или помощь будут оценены.

P.S: Если я удаляю событие переключения и контролирую значение ссылки внутри вызовов ajax, это вообще не работает.

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

1 Ответ

1 голос
/ 14 февраля 2012

В нескольких местах у вас есть утверждения в форме:

$(this).html();

ИЛИ

$(this).html('sometext'); 

Если вы измените их на:

$(this).text(); 

$(this).text('newtext'); 

, это решаетваша проблема?

ПРИМЕЧАНИЕ. «newtext» - это любой текст, который вы хотите поместить в этот тег.

РЕДАКТИРОВАТЬ ПРИМЕЧАНИЕ 2. Я ЗНАЮ, что это НЕ ВСЕ ваши проблемы, но, возможно, вы могли быобъясните желаемую функциональность немного яснее.

См. эту скрипку, чтобы определить, что именно вы ищете: http://jsfiddle.net/MarkSchultheiss/Swp7x/

ПРИМЕЧАНИЕ: она использует jsonp и кросс-домен и просто используетвозвращаемое значение вернулось обратно, но вы можете заставить часть ajax работать так, как вам нужно.Я поставил поле, чтобы визуально показать значение текущего состояния, чтобы, возможно, помочь вам понять работу.

...