我有一个javascript函数,可以在2个选择多个框之间移动项目,当我将项目从源选择框移动到目标选择框时,我将值添加到我的HiddenField,以便我可以在代码后面访问,工作正常但是当我将项目从目的地选择框移回源选择框时,我尝试使用:hidMemType.value =“”;清除隐藏的领域。我认为这有效,但显然在回发的情况下,该项目仍然卡在目的地框中。请指教,谢谢。
// 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 :(得分:0)
在这里大声思考。 你有没有在后面的代码中尝试过这个:
myControl.value = Nothing
也许这会奏效。
编辑: 您也可以尝试在其中放置一个默认值,如果它是默认值,您就不用它做任何事情。如果您已完成当前值,只需将其更改回默认值
答案 1 :(得分:0)
尝试在隐藏的控件上禁用ViewState - 也许这就是保留值的内容。
答案 2 :(得分:0)
在您的JS move
函数中,我想在for
之后的hidMemType.value = "";
循环再次设置hidMemType.value
。你有没有检查过这不是这种情况?我会将for
循环括在if
中,以确保它不会被击中。
我还会在alert
末尾添加function move()
,以准确显示退出时hidMemType.value
的内容。