2011-11-01 63 views
0

我有2间移动项目选择多箱,当我从源选择框目的地选择框移动项目的JavaScript函数,我的价值添加到我的HiddenField让我能在代码访问的背后,工作正常,但当我从目的地选择框回源选择框移到项目(S),我尝试使用:hidMemType.value =“”;清除隐藏区域。我认为这有效,但显然在发生回发时,该项目仍然卡在目的地框中。请指教,谢谢。HiddenField值不会被删除

// Move items to and fro select box 
     function move(sourceFrom, sourceTo) { 

      var hidOutlet = document.getElementById('<%=hdnOutlet.ClientID%>'); 
      var hidMemType = document.getElementById('<%=hdnMemType.ClientID%>'); 
      var hidMemStatus = document.getElementById('<%=hdnMemStatus.ClientID%>'); 

      var arrFrom = new Array(); 
      var arrTo = new Array(); 
      var arrLU = new Array(); 
      var i; 
      for (i = 0; i < sourceTo.options.length; i++) { 
       arrLU[sourceTo.options[i].text] = sourceTo.options[i].value; 
       arrTo[i] = sourceTo.options[i].text; 
      } 
      var fLength = 0; 
      var tLength = arrTo.length; 
      for (i = 0; i < sourceFrom.options.length; i++) { 
       arrLU[sourceFrom.options[i].text] = sourceFrom.options[i].value; 
       if (sourceFrom.options[i].selected && sourceFrom.options[i].value != "") { 
        arrTo[tLength] = sourceFrom.options[i].text; 
        tLength++; 
       } else { 
        arrFrom[fLength] = sourceFrom.options[i].text; 
        fLength++; 
       } 
      } 

      sourceFrom.length = 0; 
      sourceTo.length = 0; 
      var ii; 

      for(ii = 0; ii < arrFrom.length; ii++) 
      { 
      var no = new Option(); 
      no.value = arrLU[arrFrom[ii]]; 
      no.text = arrFrom[ii]; 
      sourceFrom[ii] = no; // SENDS VALUE FROM DESTINATION BOX BACK TO SOURCE BOX 
      hidMemType.value = ""; // TRY TO CLEAR MY HIDDEN FIELD HERE 
      } 


      for (ii = 0; ii < arrTo.length; ii++) { 
       var no = new Option(); 
       no.value = arrLU[arrTo[ii]]; 
       no.text = arrTo[ii]; 
       //sourceTo.options.add(no); 
       sourceTo[ii] = no; 

       if (sourceTo == (document.getElementById('<%=outletToBox.ClientID%>'))) { 
        hidOutlet.value += no.value + "|"; 
       } 
       if (sourceTo == (document.getElementById('<%=QualMemTypeToBox.ClientID%>'))) { 
        hidMemType.value += no.value + "|"; 
       } 
       if (sourceTo == (document.getElementById('<%=MemStatusToBox.ClientID%>'))) { 
        hidMemStatus.value += no.value + "|"; 
       } 
      }    



     (sourceTo).focus(); 

      if (sourceTo == (document.getElementById('<%= outletFromBox.ClientID%>'))) { 
       (sourceFrom).focus(); 
      } 
      if (sourceTo == (document.getElementById('<%= QualMemTypeFromBox.ClientID %>'))) { 
       (sourceFrom).focus(); 
      } 
      if (sourceTo == (document.getElementById('<%= MemStatusFromBox.ClientID %>'))) { 
       (sourceFrom).focus(); 
      } 

} 

代码背后:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

PopulateSelectBoxes(hdnMemType, QualMemTypeToBox, QualMemTypeFromBox) 

end Sub 

Protected Sub PopulateSelectBoxes(ByVal hdnSelectBox As HiddenField, ByVal selectBox As HtmlSelect, ByVal selectBox_Frm As HtmlSelect) 

    Dim hiddenMemType(selectBox.Items.Count - 1) As String 
     hiddenMemType = (Split(hdnSelectBox.Value, "|")) 

     Dim tempTable As String = "" 
     For Each item In hiddenMemType 
      If (tempTable.IndexOf(item) = -1) Then 
       If item <> "" Then 
        tempTable += item + "|" 
       End If 
      End If 
     Next 

     If tempTable <> "" Then 
      hiddenMemType = (Split(tempTable, "|")) 

      'We remove the items that exist in the ToBox 
      For Each item In hiddenMemType 
       selectBox_Frm.Items.Remove(item) 
      Next 

      selectBox.Items.Clear() 
      selectBox.DataSource = hiddenMemType 
      selectBox.DataBind() 
     End If 

    End Sub 

回答

0

只是想大声这里。 有你的代码试图在这背后:

myControl.value = Nothing 

也许会工作。

编辑: 你也可以尝试在其中放置一个默认值,如果它的默认值,你只是不做任何事情。如果你与当前值做到了将其改回默认

0

尝试在你的隐藏控件禁用ViewState的 - 也许这是什么保留价值。

0

在你的JS move函数中,我想象for循环跟在hidMemType.value = "";之后的是再次设置hidMemType.value。你有没有检查过,情况并非如此?我会附上该for环在if,以确保当它不应该是它没有击中。

我还会在function move()的末尾添加alert以准确显示hidMemType.value正在退出。