jQuery для эмуляции iPhone ввод пароля изменяет текстовое поле на отключенное в веб-приложении Visual Studio - PullRequest
0 голосов
/ 30 января 2020

Я работаю над веб-приложением в Visual Studio, используя визуальные основы c и главные страницы. У меня есть 10 полей текстового поля на дочерней странице, где я хотел бы эмулировать ввод пароля iPhone (ie. Показать символ, введенный в течение короткого периода времени, а затем заменить его на маркер). Это определение одного из элементов управления текстового поля:

<asp:TextBox ID="txtMID01" runat="server" Width="200" MaxLength="9"></asp:TextBox>

В нижней части страницы, где определен вышеуказанный элемент управления, у меня есть следующее:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript" src="lib/jQuery.dPassword.js"></script>
<script type="text/javascript">
        $(function () {
            var textbox01 = $("[id$=txtMID01]");
            alert(textbox01.attr("id"));
            $("[id$=txtMID01]").dPassword()
        });
</script>

Когда при загрузке страницы в предупреждении отображается MainContent_txtMID01, который является идентификатором элемента управления, которому предшествует имя держателя содержимого.

Ниже приведено содержимое lib / jQuery .dPassword. js (которое я найдено в inte rnet):

(function ($) {
$.fn.dPassword = function (options) {

    var defaults = {
        interval: 200,
        duration: 3000,
        replacement: '%u25CF',
    //    prefix: 'password_',
        prefix: 'MainContent_',
        debug: false
    }

    var opts = $.extend(defaults, options);
    var checker = new Array();
    var timer = new Array();

    $(this).each(function () {
        if (opts.debug) console.log('init [' + $(this).attr('id') + ']');

        // get original password tag values
        var name = $(this).attr('name');
        var id = $(this).attr('id');
        var cssclass = $(this).attr('class');
        var style = $(this).attr('style');
        var size = $(this).attr('size');
        var maxlength = $(this).attr('maxlength');
        var disabled = $(this).attr('disabled');
        var tabindex = $(this).attr('tabindex');
        var accesskey = $(this).attr('accesskey');
        var value = $(this).attr('value');

        // set timers
        checker.push(id);
        timer.push(id);

        // hide field
        $(this).hide();

        // add debug span
        if (opts.debug) {
            $(this).after('<span id="debug_' + opts.prefix + name + '" style="color: #f00;"></span>');
        }
        // add new text field
        $(this).after(' <input name="' + (opts.prefix + name) + '" ' +
                             'id="' + (opts.prefix + id) + '" ' +
                           'type="text" ' +
                          'value="' + value + '" ' +
           (cssclass != '' ? 'class="' + cssclass + '"' : '') +
           (style != '' ? 'style="' + style + '"' : '') +
             (size != '' ? 'size="' + size + '"' : '') +
   (maxlength != -1 ? 'maxlength="' + maxlength + '"' : '') +
      //      (disabled != '' ? 'disabled="' + disabled + '"' : '') +
     (tabindex != '' ? 'tabindex="' + tabindex + '"' : '') +
 (accesskey != undefined ? 'accesskey="' + accesskey + '"' : '') +
                  'autocomplete="off" />');

        // change label
        $('label[for=' + id + ']').attr('for', opts.prefix + id);
        // disable tabindex
        $(this).attr('tabindex', '');
        // disable accesskey
        $(this).attr('accesskey', '');


        // bind event
        $('#' + opts.prefix + id).bind('focus', function (event) {
            if (opts.debug) console.log('event: focus [' + getId($(this).attr('id')) + ']');
            clearTimeout(checker[getId($(this).attr('id'))]);
            checker[getId($(this).attr('id'))] = setTimeout("check('" + getId($(this).attr('id')) + "', '')", opts.interval);
        });
        $('#' + opts.prefix + id).bind('blur', function (event) {
            if (opts.debug) console.log('event: blur [' + getId($(this).attr('id')) + ']');
            clearTimeout(checker[getId($(this).attr('id'))]);
        });

        setTimeout("check('" + id + "', '', true);", opts.interval);
    });

    getId = function (id) {
        var pattern = opts.prefix + '(.*)';
        var regex = new RegExp(pattern);
        regex.exec(id);
        id = RegExp.$1;

        return id;
    }

    setPassword = function (id, str) {
        if (opts.debug) console.log('setPassword: [' + id + ']');

        var tmp = '';
        for (i = 0; i < str.length; i++) {
            if (str.charAt(i) == unescape(opts.replacement)) {
                tmp = tmp + $('#' + id).val().charAt(i);
            }
            else {
                tmp = tmp + str.charAt(i);
            }
        }
        $('#' + id).val(tmp);
    }

    check = function (id, oldValue, initialCall) {
        if (opts.debug) console.log('check: [' + id + ']');

        var bullets = $('#' + opts.prefix + id).val();

        if (oldValue != bullets) {
            setPassword(id, bullets);
            if (bullets.length > 1) {
                var tmp = '';
                for (i = 0; i < bullets.length - 1; i++) {
                    tmp = tmp + unescape(opts.replacement);
                }
                tmp = tmp + bullets.charAt(bullets.length - 1);

                $('#' + opts.prefix + id).val(tmp);
            }
            else {
            }
            clearTimeout(timer[id]);
            timer[id] = setTimeout("convertLastChar('" + id + "')", opts.duration);
        }
        if (opts.debug) {
            $('#debug_' + opts.prefix + id).text($('#' + id).val());
        }
        if (!initialCall) {
            checker[id] = setTimeout("check('" + id + "', '" + $('#' + opts.prefix + id).val() + "', false)", opts.interval);
        }
    }

    convertLastChar = function (id) {
        if ($('#' + opts.prefix + id).val() != '') {
            var tmp = '';
            for (i = 0; i < $('#' + opts.prefix + id).val().length; i++) {
                tmp = tmp + unescape(opts.replacement);
            }

            $('#' + opts.prefix + id).val(tmp);
        }
    }
};
})(jQuery);

Когда я выполняю свой код, код заполняет значение текстового поля значением «123456789», и когда страница отображается, все символы были изменены. на пули, что правильно. У меня проблема в том, что текстовое поле было отключено, поэтому я не могу редактировать данные в текстовом поле.

Я удалил (закомментировав) ссылки на атрибут disabled, но элемент управления по-прежнему отображается как отключенный ,

В качестве примечания, код, который я нашел в inte rnet, изначально был разработан для работы с текстовым полем с типом пароля, но когда я устанавливаю TextMode в пароль, элемент управления не только получает отображается как отключенный, но поле отображается без значения, поэтому я оставил TextMode как SingleLine.

Любые предложения или помощь очень приветствуются.

Спасибо!

1 Ответ

0 голосов
/ 30 января 2020

Насколько я знаю, это невозможно сделать так, чтобы при вводе пароля последняя буква видна на секунду, а затем превращается в пулю или звезду.

Как бы то ни было Можно сделать так, как пользователь вводит пароль, с задержкой, скажем, в 500 мс. сохранить строку, введенную пользователем до сих пор, в некоторую переменную и заменить содержимое поля пароля или текстового поля звездочками или черными маркерами. Это даст вам то, что вы ищете.

...