作成した Asp.Net ユーザー コントロールがあります。簡単にするために、一部の html は削除されています。
<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 は、1 つまたは複数の入力コントロール (テキスト ボックス、ドロップダウン リストなど) です。この例では、TextBoxMonth と TextBoxYear がオブジェクト $el であり、javascript 関数がトリガーされるとします。
私がやろうとしているのは、一意の入力コントロール オブジェクトの配列を構築することです。この例では、PanelInputControl が 2 回検出されますが、配列に追加されるのは 1 回だけです。
実際に起こっていることは$.inArray($control, controls) < 0
、状況に関係なくコードが常に -1 を返すということです (つまり、配列内に見つからないということです)。その理由はわかりません。
このコードを最後に追加しようとしましたvar cleanArray = $.unique(controls);
が、やはり重複が配列に残ります。
私は混乱しています - 何かアドバイスはありますか?