jquery表单问题。从选择框中添加删除选项

问题描述:

我有一个jquery的小问题。我有一个有很多选项的表单。jquery表单问题。从选择框中添加删除选项

在表格中,我可以使数据是私有的或公开的;

  1. 使数据专用:是,否(单选按钮)
  2. 如果点击是,显示有2只形式选择一个隐藏的div; a。成员名称搜索(文本输入) b。选定的成员(多选择框)。

    如果我点击使数据隐私“是”,然后搜索用户名,它会显示找到的结果,如建议框。当我点击一个用户名(在一个找到的结果显示在建议框中),我可以成功地将它添加到我的多选框(选定成员)

    如果我决定公开并单击使数据私人“没有“添加一些成员后,我的多选择框(选定的成员),我删除所有选项,并在那里添加1选项(公共视图)。

    问题始于此处。在提交表单之前,如果我再次单击数据隐私“是”,(1;点击是,选择一些成员,2;点击否,并从选择框中删除所有选项,3;再次点击yes),搜索一些成员,点击它们,它会在我的多选框(选定成员)中添加2次。有趣的是,如果我这样做了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")); 
    } 
}); 

谢谢您的时间和关注提前。

发现的方式,移动$(“a.member”)。住(“点击”)的外$('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; 
    }); 

当你多次绑定事件时,你应该首先.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

你好,罗恩,首先感谢你的回答。我应该在哪里使用它,我应该如何使用它?我不是专家,如果你能帮忙,我会很高兴。 – Revenant 2011-04-16 17:33:57

+0

将我的建议更改的代码添加到我的答案 – 2011-04-16 17:42:53

+0

罗恩,谢谢你的回复。不幸的是,添加.unbind()infront的bind('click')和live('click')并没有诀窍:( – Revenant 2011-04-16 19:11:54