您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Autosaves and displays the last 15 entries of a single input field. Entries are saved on Enter or button click, and can be recovered or deleted.
当前为
- // ==UserScript==
- // @name Autosave form Inputs and Display 15-Item History
- // @namespace http://tampermonkey.net/
- // @version 2024-08-08
- // @description Autosaves and displays the last 15 entries of a single input field. Entries are saved on Enter or button click, and can be recovered or deleted.
- // @author Lawrence d'Aniello
- // @match https://example.com/* // Customize to match your target website
- // @license MIT
- // @grant none
- // ==/UserScript==
- (function() {
- 'use strict';
- // Example selectors - change these to match the specific site
- const inputField = document.querySelector('input[type="text"]'); // Change CSS selector to match your input field
- const searchButton = document.querySelector('button'); // Change CSS selector to match your search button
- inputField.setAttribute('autocomplete', 'off');
- let savedInputEntries = JSON.parse(localStorage.getItem('savedInputEntries')) || [];
- function updateSavedInputEntries(newEntry) {
- if (newEntry.trim() !== "" && !savedInputEntries.includes(newEntry)) {
- savedInputEntries.push(newEntry);
- if (savedInputEntries.length > 15) {
- savedInputEntries.shift();
- }
- localStorage.setItem('savedInputEntries', JSON.stringify(savedInputEntries));
- displaySavedInputEntries();
- }
- }
- function deleteEntry(entryToDelete) {
- savedInputEntries = savedInputEntries.filter(entry => entry !== entryToDelete);
- localStorage.setItem('savedInputEntries', JSON.stringify(savedInputEntries));
- displaySavedInputEntries();
- }
- function displaySavedInputEntries() {
- let existingDropdown = document.getElementById('savedInputEntriesDropdown');
- if (existingDropdown) {
- existingDropdown.remove();
- }
- const dropdown = document.createElement('ul');
- dropdown.id = 'savedInputEntriesDropdown';
- dropdown.style.listStyleType = 'none';
- dropdown.style.padding = '5px';
- dropdown.style.border = '1px solid #ccc';
- dropdown.style.position = 'absolute';
- dropdown.style.backgroundColor = '#fff';
- dropdown.style.zIndex = '1000';
- dropdown.style.maxHeight = '150px';
- dropdown.style.overflowY = 'auto';
- const inputRect = inputField.getBoundingClientRect();
- dropdown.style.left = `${inputRect.left}px`;
- dropdown.style.top = `${inputRect.bottom + window.scrollY}px`;
- dropdown.style.width = `${inputRect.width}px`;
- const uniqueEntries = new Set(savedInputEntries);
- Array.from(uniqueEntries).reverse().forEach(entry => {
- const listItem = document.createElement('li');
- listItem.style.display = 'flex';
- listItem.style.justifyContent = 'space-between';
- listItem.style.padding = '5px';
- listItem.style.cursor = 'pointer';
- listItem.style.position = 'relative';
- listItem.style.transition = 'background-color 0.3s, color 0.3s';
- listItem.textContent = entry;
- // Hover styles
- listItem.addEventListener('mouseover', function() {
- listItem.style.backgroundColor = '#f0f0f0';
- listItem.style.color = '#333';
- deleteButton.style.display = 'inline';
- });
- listItem.addEventListener('mouseout', function() {
- listItem.style.backgroundColor = '#fff';
- listItem.style.color = '#000';
- deleteButton.style.display = 'none';
- });
- const deleteButton = document.createElement('button');
- deleteButton.textContent = '✖';
- deleteButton.style.display = 'none';
- deleteButton.style.background = 'none';
- deleteButton.style.border = 'none';
- deleteButton.style.color = 'red';
- deleteButton.style.cursor = 'pointer';
- deleteButton.style.position = 'absolute';
- deleteButton.style.right = '10px';
- deleteButton.style.top = '50%';
- deleteButton.style.transform = 'translateY(-50%)';
- deleteButton.addEventListener('click', function(event) {
- event.stopPropagation();
- deleteEntry(entry);
- });
- listItem.appendChild(deleteButton);
- listItem.addEventListener('click', function() {
- inputField.value = entry;
- hideSavedInputEntries();
- inputField.focus();
- });
- dropdown.appendChild(listItem);
- });
- document.body.appendChild(dropdown);
- }
- function hideSavedInputEntries() {
- let existingDropdown = document.getElementById('savedInputEntriesDropdown');
- if (existingDropdown) {
- existingDropdown.remove();
- }
- }
- function handleClick(event) {
- if (event.target !== inputField && !inputField.contains(event.target)) {
- hideSavedInputEntries();
- } else if (event.target === inputField) {
- displaySavedInputEntries();
- }
- }
- inputField.addEventListener('focus', function() {
- // Debounce the display function to prevent flickering
- setTimeout(displaySavedInputEntries, 100);
- });
- document.addEventListener('click', handleClick);
- inputField.addEventListener('input', function() {
- hideSavedInputEntries();
- });
- inputField.addEventListener('keydown', function(event) {
- if (event.key === 'Enter') {
- updateSavedInputEntries(inputField.value);
- hideSavedInputEntries();
- }
- });
- searchButton.addEventListener('click', function() {
- updateSavedInputEntries(inputField.value);
- hideSavedInputEntries();
- });
- window.addEventListener('resize', function() {
- let dropdown = document.getElementById('savedInputEntriesDropdown');
- if (dropdown) {
- const inputRect = inputField.getBoundingClientRect();
- dropdown.style.left = `${inputRect.left}px`;
- dropdown.style.top = `${inputRect.bottom + window.scrollY}px`;
- dropdown.style.width = `${inputRect.width}px`;
- }
- });
- })();