我有一個我創建的Asp.Net用戶控件。爲了簡單起見,一些html已被刪除。javascript數組不是唯一的
<asp:Panel ID="PanelInputControl" runat="server" CssClass="input-control input-period">
<div ID="InputWrapperMonth" runat="server" class="input-wrapper input-month">
<asp:TextBox ID="TextBoxMonth" runat="server"
MaxLength="2">
</asp:TextBox>
</div>
<div ID="InputWrapperYear" runat="server" class="input-wrapper input-year">
<asp:TextBox ID="TextBoxYear" runat="server"
MaxLength="4">
</asp:TextBox>
</div>
</asp:Panel>
我也有一個javascript函數,它根據數據輸入的有效性添加類。我再次刪除了一些剩餘的代碼。
下面是如何建立$ EL:
var $el = $(this).closest('.form').find('input[type="text"], input[type="checkbox"], select, textarea');
這裏的javascript函數我打電話:
function updateInputStatus($el) {
var controls = [];
$el.each(function() {
$control = $(this).closest('.input-control');
if ($.inArray($control, controls) < 0) {
controls.push($control);
}
})
}
$ EL是一個或多個輸入控制裝置 - 文本框,下拉列表等。在這個例子讓說TextBoxMonth和TextBoxYear是我們的對象$ el,並且觸發了javascript函數。
我想要做的是建立一個獨特的輸入控制對象的數組。在這個例子中PanelInputControl會被找到兩次,但我只希望它被添加到數組中一次。
實際情況是,代碼$.inArray($control, controls) < 0
始終返回-1,無論情況如何(在數組中找不到它),我不明白爲什麼。
我也試過在最後加上這段代碼var cleanArray = $.unique(controls);
,但是這些副本仍然保留在數組中。
我很困惑 - 有什麼建議嗎?
'$(元素)=== $(element)'爲false,因爲它們是兩個不同的對象,即使它們包含相同的DOM元素。考慮將實際DOM元素存儲在'controls'而不是jQuery包裝器中。 – DCoder
我不明白爲什麼'$ el'會多次包含相同的元素。 – JJJ
@juhana - $ el不會多次包含相同的元素,但在這個示例中,它們都引用了同一個父對象,然後被複制。 – dotnetnoob