jquery表单问题。从选择框中添加删除选项
问题描述:
我有一个jquery的小问题。我有一个有很多选项的表单。jquery表单问题。从选择框中添加删除选项
在表格中,我可以使数据是私有的或公开的;
- 使数据专用:是,否(单选按钮)
-
如果点击是,显示有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"));
}
});
你好,罗恩,首先感谢你的回答。我应该在哪里使用它,我应该如何使用它?我不是专家,如果你能帮忙,我会很高兴。 – Revenant 2011-04-16 17:33:57
将我的建议更改的代码添加到我的答案 – 2011-04-16 17:42:53
罗恩,谢谢你的回复。不幸的是,添加.unbind()infront的bind('click')和live('click')并没有诀窍:( – Revenant 2011-04-16 19:11:54