2011-04-16 169 views
1

我有一個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")); 
    } 
}); 

謝謝您的時間和關注提前。

回答

0

發現的方式,移動$(「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; 
    }); 
2

當你多次綁定事件時,你應該首先.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

相關問題