1

jquery-1.5.2.min.js でアプリケーションを実行しています。IE9、8、7、FF、および Chrome で正常に動作します。

しかし、この問題があります。非表示フィールドの動作を制御する jQuery を使用して、カスタム .js ファイルに JavaScript 関数があります。ボタンがクリックされるたびに、隠しフィールドが jQuery オートコンプリート コントロールに変わり、Ajax 呼び出しによってオートコンプリート情報が読み込まれます。関数は次のようになります。

$.ajax({
        type: "POST",
        url: action,
        dataType: "json",
        data: "{type: '" + control + "', param:" + params + "}",
        contentType: "application/json; charset=utf-8",
        success: function (data) {
            var dataTable = data;
            $(selector).autocomplete({
                minLength: 2,
                source: dataTable,
                open: function (e, ui) {
                    var options = $(this).data('autocomplete');

                    options.menu.element.find('a').each(function () {
                        var this_ = $(this);
                        var regex = new RegExp(options.term, "gi");
                        this_.html(this_.text().replace(regex, function (matched) {
                            return autocompleteTemplate.replace('%s', matched);
                        }));
                    });
                },
                focus: function (event, ui) {
                    $(selector).val(ui.item.label);
                    return false;
                },
                change: function (event, ui) {
                    if (!ui.item) {
                        var options = $(this).data('autocomplete');
                        var matcher = new RegExp("^" + $.ui.autocomplete.escapeRegex($(this).val()) + "$", "i"),
                            valid = false;
                        options.menu.element.find('a').each(function () {
                            if ($(this).text().match(matcher)) {
                                valid = true;
                                return false;
                            }
                        });
                        if (!valid) {
                            if (control == "ProjectType") {
                                $('#selector').val("...");
                                $('#selector').attr('disabled', 'disabled');
                                $('#another.selector').val("");
                            }
                            // Remueve los valores inválidos.
                            $(this).val("");
                            $(selector).val("");
                            $(selector).data("autocomplete").term = "";
                            return false;
                        }
                    }

                    if (control == "ProjectType") {
                        $('#selector').val("");
                    }
                },
                select: function (event, ui) {
                    $(selector).val(ui.item.label);

                    $(hidden).val(ui.item.value);

                    if (control == "ProjectType") {
                        Autocomplete("ProjectSubType", action, ui.item.value);
                        // This is a function that changes the CSS for another HTML control
                        ProjectSubType(false);
                    }
                    return false;
                }
            });
        }
    });

したがって、ブラウザーの種類を IE8 から IE7 または IE9 に、または IE7 から IE8 または IE9 に変更するたびに、このフィールドを有効にした後、jquery-1.5.2.min.js から次の例外がスローされます。

Microsoft JScript からのランタイム エラー: プロパティ 'type' の値を取得できません: オブジェクトが null または未定義です

ご参考までに:

  • AJAX 呼び出しが機能します。オートコンプリートは適切に機能し、完了時に発生する必要があるイベントを、発生する必要がある順序で発生させます。
  • 別の AJAX イベント (jqGrid を埋める) を発生させる別のコントロールがあり、間違いはありません。
  • コードに表示される条件句 "if (control == "ProjectType")" は、使用されているこのコントロールにオートコンプリート オプションが入力されている場合に、別のコントロールをオートコンプリートに変更できるようにすることを目的としています。それ以外の場合は無効になります。 、ご覧のとおり (名前を「#selector」に変更しました)。これも適切に機能します。そのオートコンプリートに値を入力すると、他のコントロールに必要なオプションが入力されます。

ありがとう

UDP

AJAX 関数を呼び出す関数は次のとおりです。

function SetSearchMenu(url, local) {
    $('#advancedSearch').hide();
    $('#advSearch').click(function () {
        if ($('#advancedSearch').css("display") == "none") {
            $('#advancedSearch').show();
            $('#generalSearch').val("...");
            $('#generalSearch').attr('disabled', 'disabled');
            ProjectSubType(true);
        }
        else {
            $('#dAdvancedSearch').hide();
            $('#General').val("");
            $('#General').removeAttr('disabled');
        }

        if (alreadyOpen == false) {
            Autocomplete("SelectorOne", url, null);
            Autocomplete("ProjectType", url, null);
            Autocomplete("Selector", url, local);
            alreadyOpen = true;
        }
    });
}

パラメータ url および local は $(document).ready() 関数から送信され、文字列形式の @Url.Action() とハードコードされた別の変数で埋められます。

4

0 に答える 0