JQuery формы проблемы. Добавление параметров удаления из selectbox - PullRequest
1 голос
/ 16 апреля 2011

У меня небольшая проблема с Jquery. У меня есть форма с большим количеством опций.

В форме я могу сделать данные частными или общедоступными;

  1. Сделать данные приватными: да, нет (переключатели)
  2. Если щелкнуть «да», отобразится скрытый элемент div с двумя дополнительными параметрами формы; а. поиск имени участника (ввод текста) б. выбранные участники (множественный выбор).

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

    Если я решу сделать его общедоступным и щелкнуть «сделать данные частными» «нет» после добавления некоторых членов в свой мультиселектор (выбранные элементы), я удаляю все параметры и добавляю туда 1 вариант обратно (публичное представление) .

    Проблема начинается после того, как здесь. Перед отправкой формы, если я нажму снова сделать данные личными "да", (1; нажал да, выбрал несколько участников, 2; нажал нет и удалил все опции из selectbox, 3; нажал да еще раз), поиск некоторых участников и нажмите на них, это добавление 2 раза в моем multi selectbox (выбранных участников).

    Интересно, что если я сделаю это 2 раза (добавьте несколько участников, нажмите «Нет», чтобы уединиться и удалите параметры), в следующий раз, когда я захочу добавить несколько участников, это добавится 2 раза. Если я сделаю это 5 раз, то добавлю 5 раз.

    Я понятия не имею, что может вызвать это, я буду рад, если кто-нибудь может мне помочь.

Вот мой Jquery;

// Private Options
$('input[name=make_private]').bind('click', function () {
    // Make It Private
    if ($(this).val() == 1) {
        $('.frm_make_private_1').fadeIn(1000);
        // Get clicked member
        $('a.member').live('click', function () {
            var username = $(this).text();
            var id = $(this).attr("id");
            // Add it to the Allowed Members Multi Selectbox
            $('#allowedMembers').append($("<option></option>").attr("value", id).text(username).attr("selected","selected"));
            // Don't load the page
            return false;
        });
    }
    // Make It Public
    else {
        // Hide everything about Product Privacy
        $('.frm_make_private_1').fadeOut(1000);
        // Remove All Options
        $("#allowedMembers option").each(function() {
            $(this).remove();
        });         
        // Add Public Option
        $('#allowedMembers').append($("<option></option>").attr("value", 0).text("Public View"));
    }
});

Спасибо за ваше время и заботу заранее.

Ответы [ 2 ]

2 голосов
/ 16 апреля 2011

Когда вы связываете события несколько раз, вы должны сначала .unbind().В противном случае у вас будет несколько (и, возможно, одинаковых) событий, связанных с одним и тем же действием

Попробуйте

('input[name=make_private]').unbind().bind('click', function () {
// Make It Private
if ($(this).val() == 1) {
    $('.frm_make_private_1').fadeIn(1000);
    // Get clicked member
    $('a.member').unbind().live('click', function () {
        var username = $(this).text();
        var id = $(this).attr("id");
        // Add it to the Allowed Members Multi Selectbox
        $('#allowedMembers').append($("<option></option>").attr("value", id).text(username).attr("selected","selected"));
        // Don't load the page
        return false;
    });
}
// Make It Public
else {
    // Hide everything about Product Privacy
    $('.frm_make_private_1').fadeOut(1000);
    // Remove All Options
    $("#allowedMembers option").each(function() {
        $(this).remove();
    });         
    // Add Public Option
    $('#allowedMembers').append($("<option></option>").attr("value", 0).text("Public View"));
}
});
0 голосов
/ 17 апреля 2011

Нашел способ, переместив $ ('a.member'). Live ('click') за пределы $ ('input [name = make_private]'). Bind ('click'), добившись цели. Спасибо, Рон, за то, что направил меня.

// Private Options
$('input[name=make_private]').bind('click', function () {
    // Make It Private
    if ($(this).val() == 1) {
        $('.frm_make_private_1').fadeIn(1000);
    }
    // Make It Public
    else {
        // Hide everything about Product Privacy
        $('.frm_make_private_1').fadeOut(1000);
        // Remove All Options
        $("#allowedMembers option").each(function() {
            $(this).remove();
        });         
        // Add Public Option
        $('#allowedMembers').append($("<option></option>").attr("value", 0).text("Public View"));
    }
});
// Get clicked member
    $('a.member').live('click', function () {
        var username = $(this).text();
        var id = $(this).attr("id");
        // Add it to the Allowed Members Multi Selectbox
        $('#allowedMembers').append($("<option></option>").attr("value", id).text(username).attr("selected","selected"));
        // Don't load the page
        return false;
    });
...