(function($) { 'use strict'; window.initPasswordToggle = function() { $('.password-container').each(function() { var $container = $(this); var $input = $container.find('input[type="password"], input[type="text"]'); var $button = $container.find('.password-toggle'); if ($input.length === 0 || $button.length === 0) return; var $referenceInput = null; var $currentTr = $container.closest('tr'); if ($currentTr.length > 0) { $referenceInput = $currentTr.prev('tr').find('input[type="text"]').first(); } if (!$referenceInput || $referenceInput.length === 0) { $referenceInput = $container.closest('table').find('input[type="text"]').not('.password-container input').first(); } if (!$referenceInput || $referenceInput.length === 0) { $referenceInput = $container.closest('form').find('input[type="text"]').not('.password-container input').first(); } var inputWidth; if ($referenceInput && $referenceInput.length > 0) { inputWidth = $referenceInput.outerWidth(); } else { var $parent = $input.parent(); var nextSibling = $input.next()[0]; $input.insertBefore($container); inputWidth = $input.outerWidth(); if (nextSibling) { $input.insertBefore(nextSibling); } else { $parent.append($input); } } var inputHeight = $input.outerHeight(); var buttonSize = Math.min(Math.floor(inputHeight * 0.8), 24); $container.css({ 'position': 'relative', 'display': 'inline-block', 'width': inputWidth + 'px' }); $input.css({ 'width': '100%', 'box-sizing': 'border-box', 'padding-right': (buttonSize + 16) + 'px' }); $button.css({ 'position': 'absolute', 'right': '8px', 'top': '50%', 'transform': 'translateY(-50%)', '-ms-transform': 'translateY(-50%)', 'width': buttonSize + 'px', 'height': buttonSize + 'px', 'border': 'none', 'background': 'none', 'padding': '0', 'cursor': 'pointer', 'z-index': '10' }); $button.find('img').css({ 'width': buttonSize + 'px', 'height': buttonSize + 'px', 'display': 'block' }); }); $('.password-toggle').off('click.passwordToggle').on('click.passwordToggle', function(e) { e.preventDefault(); e.stopPropagation(); var $button = $(this); var $icon = $button.find('img'); var targetId = $button.attr('data-target'); if (!targetId) return false; var $passwordInput = $('#' + targetId); if ($passwordInput.length === 0) return false; // 切換密碼顯示 if ($passwordInput.attr('type') === 'password') { $passwordInput.attr('type', 'text'); var iconPath = $icon.attr('src'); var basePath = iconPath.substring(0, iconPath.lastIndexOf('/') + 1); $icon.attr('src', basePath + 'eye_o.jpg'); } else { $passwordInput.attr('type', 'password'); var iconPath = $icon.attr('src'); var basePath = iconPath.substring(0, iconPath.lastIndexOf('/') + 1); $icon.attr('src', basePath + 'eye_c.jpg'); } return false; }); $('.password-toggle').hover( function() { $(this).css('opacity', '0.7'); }, function() { $(this).css('opacity', '1'); } ); var css = 'input[type="password"]::-ms-reveal,' + 'input[type="text"]::-ms-clear {' + ' display: none;' + '}'; if ($('#password-toggle-styles').length === 0) { $('').appendTo('head'); } }; })(jQuery);