0

作成した 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);が、やはり重複が配列に残ります。

私は混乱しています - 何かアドバイスはありますか?

4

1 に答える 1

3

ループの反復ごとに、次を使用して新しい jQuery オブジェクトを作成します。

$control = $(this).closest('.input-control');

そして、配列.push()に入れるのはこれらの jQuery オブジェクトです。controlsこれらの jQuery オブジェクトの一部には同じ DOM 要素への参照が含まれている場合がありますが、比較$.inArray()対象は jQuery オブジェクトであり、これらはすべて別個のオブジェクトであり、重複していません。

ただし、.closest()メソッド自体は重複を返さないため、次のようにすることができます。

controls = $el.closest('input-control');

次に、変数は、にあったものに最も近い一意の要素をcontrols持つjQueryオブジェクトになります。input-control$el

controlsそれぞれが1つの要素のみを含み、重複がないjQueryオブジェクトの配列になりたい場合はinput-control、次のようにすることができます。

controls = $.map($el.closest('input-control'), function(v,i) { return $(v); });
于 2013-08-03T15:31:07.437 に答える