Зачем выполнять ту же функцию после изменения идентификатора ссылки? - PullRequest
1 голос
/ 29 декабря 2011

Я пытаюсь создать добавить / удалить избранное с помощью jquery и php.Функция addfavorite работает, но когда я меняю атрибут id ссылки с addfavorite на removefavorite, она не работает.Идентификатор изменился, но он все еще выполняет функцию addfavorite.Если я открываю firebug, я вижу, что идентификатор изменился в id = "removefavorite", но когда я открывал исходный код страницы, он не изменил ID = 'addfavorite'

Как я могу изменить с помощью jquery идентификатор IDссылка даже в дом?

JQUERY:
$(document).ready(function() {
$('#addfavorite').click(function() {
    id = $('#item').attr('value');
    $.ajax({
        type: "POST",
        url: "http://127.0.1.1/zend/fm/public/video/addfavorite",
        data: "id_video="+id,
        cache: false,
        async: false,
        success: function(result) {
            $('#addfavorite').attr('id','removefavorite');
            $('#removefavorite').text('Remove from favorite');
        getRating(text);
        },
        error: function(result) {
            alert("some error occured, please try again later");
        }
    });
});

$('#removefavorite').click(function() {
    id = $('#item').attr('value');
    $.ajax({
        type: "POST",
        url: "http://127.0.1.1/zend/fm/public/video/removefavorite",
        data: "id_video="+id,
        cache: false,
        async: false,
        success: function(result) {
            $('#removefavorite').attr('id','removefavorite');
            $('#removefavorite').text('Remove from favorite');
        getRating(text);
        },
        error: function(result) {
            alert("some error occured, please try again later");
        }
    });
});
)};

HTML:
<a href="javascript:void(0)" id="addfavorite">
    Add to favorite
</a>

Ответы [ 3 ]

2 голосов
/ 29 декабря 2011

Прежде всего, сколько ссылок вы будете использовать с помощью атрибута ID?Помните, что идентификатор предназначен только для одного элемента.Я бы порекомендовал вам сделать это с помощью функции переключения http://api.jquery.com/toggle-event/.

Я полагаю, код не работает, потому что вы использовали событие .click вместо .live, а событие #removefavorite несуществует, когда вы привязали его к событию click (потому что это #removefavorite).Также помните, что события присваиваются элементам, поэтому элемент может изменять атрибуты и при этом сохранять событие.Вы можете отменить привязку первого события щелчка, прежде чем назначить другое, если вы не хотите делать это с переключателями или активными функциями.

Кроме того, Firebug показывает измененный DOM на лету, поэтому вы можете видеть, что он изменился,Когда вы просматриваете исходный код, вы просматриваете исходный HTML-документ, который вы загрузили (без изменения JavaScript).

Я также рекомендую вам использовать расширение FireQuery для Firefox: оно покажет вам связанные событияк этому элементу (среди других полезных данных, если вы разрабатываете в jQuery)

Надеюсь, мой первый пост поможет вам:)

1 голос
/ 29 декабря 2011
$('#addfavorite').toggle(function() {
     id = $('#item').attr('value');
     $.ajax({
        type: "POST",
        url: "http://127.0.1.1/zend/fm/public/video/addfavorite",
        data: "id_video="+id,
        cache: false,
        async: false,
        success: function(result) {
            $('#addfavorite').text('Remove from favorite');
            getRating(text);
        },
        error: function(result) {
            alert("some error occured, please try again later");
        }
     });
   }, function() {
     id = $('#item').attr('value');
     $.ajax({
        type: "POST",
        url: "http://127.0.1.1/zend/fm/public/video/removefavorite",
        data: "id_video="+id,
        cache: false,
        async: false,
        success: function(result) {
            $('#addfavorite').text('Remove from favorite');
            getRating(text);
        },
        error: function(result) {
            alert("some error occured, please try again later");
        }
     });
   });

Не изменяйте id элемента, просто меняйте метку.Я думаю, что это поможет вам.

0 голосов
/ 29 декабря 2011

Хорошо, ответ заключается в том, что вы связываете свои функции щелчка после загрузки документа в $(document).ready(function() { ... }.

Таким образом, вы действительно меняете свой идентификатор ссылки, если Ajax-вызов был выполнен успешно, и это должно работать. Я не могу обнаружить никаких ошибок в этом. Дело в том, что вы не обновляете свои триггеры. Таким образом, даже если идентификатор элемента изменился, предыдущий триггер все еще привязан к нему. Таким образом, способ решить эту проблему - обновить триггеры, повторив команду $('#removefavorite').click(function() { ... } );

Напишите для этого еще одну функцию, потому что вы не можете вложить ее 1290383948 раз друг в друга. ; -)

Вот пример, который я быстро сделал в JSFiddle: http://jsfiddle.net/S2ERT/ Это не правильно закодировано, как я сделал это за 1 минуту, но вы поймете идею.

...