Revolutionary design meets cutting-edge functionality. Select transforms ordinary dropdowns into extraordinary user experiences with stunning animations, perfect accessibility, and intuitive interactions.
Works seamlessly with all modern JavaScript frameworks and libraries
Weekly Downloads
GitHub Stars
Uptime
Every feature designed with performance, accessibility, and developer experience in mind. Create beautiful, functional select components in minutes, not hours.
Lightning-fast search with debounced input, fuzzy matching, and keyboard navigation. Find options instantly as you type.
Advanced multi-selection with select all, clear all, and maximum selection limits. Perfect for complex forms.
WCAG 2.1 AA compliant with full screen reader support, ARIA labels, and high contrast modes.
Optimized performance with virtual scrolling, lazy loading, and minimal DOM manipulation.
Simple API, TypeScript support, comprehensive documentation, and extensive customization options.
Beautiful default styling with CSS variables, dark mode support, and easy theming capabilities.
Choose your preferred installation method and start building amazing select components
Using npm:
npm install as-select3
Using yarn:
yarn add as-select3
Import in your JavaScript:
// Import the CSS
import 'as-select3/dist/as-select3.min.css';
// Import the library (requires jQuery)
import 'as-select3';
Include via CDN:
<!-- CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/as-select3/dist/as-select3.min.css">
<!-- JavaScript (requires jQuery) -->
<script src="https://cdn.jsdelivr.net/npm/jquery@3.7.0/dist/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/as-select3/dist/as-select3.min.js"></script>
Download and include these files:
<!-- CSS -->
<link rel="stylesheet" href="lib/dist/as-select3.min.css">
<!-- JavaScript (requires jQuery) -->
<script src="https://cdn.jsdelivr.net/npm/jquery@3.7.0/dist/jquery.min.js"></script>
<script src="lib/dist/as-select3.min.js"></script>
| Option | Type | Default | Description |
|---|---|---|---|
searchable |
boolean | false | Enable search functionality |
placeholder |
string | "Choose an option..." | Placeholder text when nothing is selected |
maxSelection |
number | null | Maximum number of selections allowed |
selectAll |
boolean | false | Show "Select All" button for multi-select |
clearAll |
boolean | false | Show "Clear All" button |
remote |
function | null | Function for loading remote data |
searchDelay |
number | 300 | Delay in ms before triggering search |
Experience As-Select3 in action! These are fully functional demos showcasing different configurations and use cases.
Simple single select dropdown
<select id="basic-demo-select" class="form-control">
<option value="">Select an option</option>
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
<option value="4">Option 4</option>
<option value="5">Option 5</option>
</select>
$('#basic-demo-select').asSelect3({
placeholder: 'Select an option',
searchable: false
});
Multiple selection with search functionality and icons
<select id="multi-demo-select" multiple class="form-control">
<option value="javascript" data-icon="๐จ">JavaScript</option>
<option value="python" data-icon="๐">Python</option>
<option value="java" data-icon="โ">Java</option>
<option value="csharp" data-icon="๐ช">C#</option>
<option value="php" data-icon="๐">PHP</option>
<option value="ruby" data-icon="๐">Ruby</option>
<option value="golang" data-icon="๐ต">Go</option>
<option value="swift" data-icon="๐งก">Swift</option>
<option value="rust" data-icon="๐ฆ">Rust</option>
<option value="kotlin" data-icon="๐ฃ">Kotlin</option>
</select>
$('#multi-demo-select').asSelect3({
placeholder: 'Select programming languages',
searchable: true,
searchPlaceholder: 'Search languages...',
selectAll: true,
clearAll: true
});
Limit the number of items that can be selected
<select id="max-demo-select" multiple class="form-control">
<option value="design" data-icon="๐จ">UI/UX Design</option>
<option value="frontend" data-icon="๐ฅ๏ธ">Frontend Development</option>
<option value="backend" data-icon="โ๏ธ">Backend Development</option>
<option value="devops" data-icon="๐">DevOps</option>
<option value="mobile" data-icon="๐ฑ">Mobile Development</option>
<option value="data" data-icon="๐">Data Science</option>
<option value="ml" data-icon="๐ง ">Machine Learning</option>
<option value="security" data-icon="๐">Security</option>
</select>
<div id="max-selection-warning" class="alert alert-warning mt-3 d-none">
<i class="bi bi-exclamation-triangle me-2"></i>
You can select a maximum of 3 skills.
</div>
$('#max-demo-select').asSelect3({
placeholder: 'Select up to 3 skills',
searchable: true,
searchPlaceholder: 'Find skills...',
maxSelection: 3
});
$('#max-demo-select').on('asSelect3:maxselection', function(e) {
$('#max-selection-warning').removeClass('d-none');
setTimeout(() => {
$('#max-selection-warning').addClass('d-none');
}, 3000);
});
Display user avatars with names
<select id="profile-demo-select" class="form-control">
<option value="">Select team members</option>
<option value="user1" data-icon="https://avatar.iran.liara.run/public/boy?username=alex">Alex Johnson</option>
<option value="user2" data-icon="https://avatar.iran.liara.run/public/girl?username=sophia">Sophia Chen</option>
<option value="user3" data-icon="https://avatar.iran.liara.run/public/boy?username=michael">Michael Smith</option>
<option value="user4" data-icon="https://avatar.iran.liara.run/public/girl?username=emma">Emma Davis</option>
<option value="user5" data-icon="https://avatar.iran.liara.run/public/boy?username=david">David Wilson</option>
<option value="user6" data-icon="https://avatar.iran.liara.run/public/girl?username=olivia">Olivia Taylor</option>
</select>
$('#profile-demo-select').asSelect3({
placeholder: 'Select team members',
imageWidth: 36,
imageHeight: 36,
imageBorderRadius: '50%',
imagePosition: 'left',
searchable: true
});
Load random user profiles from an API
<select id="remote-demo-select" class="form-control">
<option value="">Search for random users...</option>
</select>
$('#remote-demo-select').asSelect3({
placeholder: 'Search for random users...',
searchable: true,
remote: async function(searchTerm) {
try {
let url = 'https://randomuser.me/api/?results=10';
url += '&inc=name,picture,location,email,login';
url += '&nat=us,gb,fr,au,ca';
if (searchTerm) {
url += '&seed=' + encodeURIComponent(searchTerm);
}
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json();
return data.results.map(function(user) {
const fullName = user.name.first + ' ' + user.name.last;
return {
value: user.login.uuid,
text: fullName,
icon: user.picture.medium,
html: '<div class="d-flex align-items-center gap-2">' +
'<img src="' + user.picture.medium + '" width="48" height="48" style="border-radius:50%">' +
'<div>' +
'<div class="fw-semibold">' + fullName + '</div>' +
'<div class="small text-muted">' + user.location.city + ', ' + user.location.country + '</div>' +
'</div>' +
'<div class="ms-auto small text-muted">' +
'<i class="bi bi-envelope me-1"></i>' +
user.email +
'</div>' +
'</div>'
};
});
} catch (error) {
console.error('RandomUser API Error:', error);
return [];
}
}
});
Customized colors and styling
<!-- Single Select with Custom Theme -->
<label for="custom-demo-select" class="form-label">Choose Your Mood:</label>
<select id="custom-demo-select" class="form-control custom-select-theme">
<option value="">How are you feeling today?</option>
<option value="happy" data-icon="๐">Happy</option>
<option value="excited" data-icon="๐ฅณ">Excited</option>
<option value="calm" data-icon="๐">Calm</option>
<option value="focused" data-icon="๐ง ">Focused</option>
<option value="tired" data-icon="๐ด">Tired</option>
<option value="inspired" data-icon="๐ก">Inspired</option>
<option value="creative" data-icon="๐จ">Creative</option>
</select>
<!-- Multi Select with Custom Theme -->
<label for="custom-demo-select-multi" class="form-label">Choose Your Activities:</label>
<select id="custom-demo-select-multi" class="form-control custom-select-theme" multiple>
<option value="coding" data-icon="๐ป">Coding</option>
<option value="reading" data-icon="๐">Reading</option>
<option value="gaming" data-icon="๐ฎ">Gaming</option>
<option value="exercising" data-icon="๐">Exercising</option>
<option value="cooking" data-icon="๐ณ">Cooking</option>
<option value="music" data-icon="๐ต">Music</option>
<option value="art" data-icon="๐จ">Art</option>
</select>
// Initialize single select with custom theme
$('#custom-demo-select').select3({
placeholder: 'How are you feeling today?',
searchable: true,
theme: 'custom-purple'
});
// Initialize multi select with custom theme
$('#custom-demo-select-multi').select3({
placeholder: 'Select your activities',
searchable: true,
selectAll: true,
clearAll: true,
theme: 'custom-purple'
});
/* Custom Purple Theme for Select3 */
.select3-container.custom-purple .select3-dropdown {
border-color: #8A2BE2;
box-shadow: 0 0 0 0.25rem rgba(138, 43, 226, 0.25);
}
.select3-container.custom-purple .select3-selection {
border-color: #8A2BE2;
background: linear-gradient(to right, rgba(138, 43, 226, 0.05), rgba(138, 43, 226, 0.1));
}
.select3-container.custom-purple .select3-selection:hover {
border-color: #9370DB;
}
.select3-container.custom-purple.select3-focus .select3-selection {
border-color: #8A2BE2;
box-shadow: 0 0 0 0.25rem rgba(138, 43, 226, 0.25);
}
/* Customize the selected items */
.select3-container.custom-purple .select3-tag {
background-color: #8A2BE2;
border-color: #8A2BE2;
color: #fff;
}
.select3-container.custom-purple .select3-tag:hover {
background-color: #9370DB;
}
/* Customize the dropdown items */
.select3-container.custom-purple .select3-option:hover,
.select3-container.custom-purple .select3-option.select3-option-highlighted {
background-color: rgba(138, 43, 226, 0.1);
}
.select3-container.custom-purple .select3-option.select3-option-selected {
background-color: rgba(138, 43, 226, 0.2);
color: #8A2BE2;
}
/* Customize action buttons */
.select3-container.custom-purple .select3-actions .select3-select-all,
.select3-container.custom-purple .select3-actions .select3-clear-all {
color: #8A2BE2;
}
.select3-container.custom-purple .select3-actions .select3-select-all:hover,
.select3-container.custom-purple .select3-actions .select3-clear-all:hover {
text-decoration: none;
color: #9370DB;
}
Rich HTML content with custom templates (NEW in v1.1)
<!-- HTML Content Options -->
<select id="html-basic-select" class="form-control">
<option value="">Choose a team member...</option>
<option value="john" data-html="<strong>John Doe</strong><br><small class='text-muted'><i class='bi bi-code-slash'></i> Lead Developer</small>">John Doe</option>
<option value="jane" data-html="<strong>Jane Smith</strong><br><small class='text-muted'><i class='bi bi-palette'></i> UI/UX Designer</small>">Jane Smith</option>
</select>
<!-- Template-based Options -->
<select id="html-template-select" class="form-control" multiple>
<option value="1">Sarah Johnson</option>
<option value="2">Michael Chen</option>
<option value="3">Emma Davis</option>
</select>
// HTML Content with data-html attribute
$('#html-basic-select').asSelect3({
allowHtml: true,
placeholder: 'Choose a team member...',
searchable: true
});
// Custom Templates
$('#html-template-select').asSelect3({
placeholder: 'Select users...',
templateResult: function(data) {
if (!data.id) return data.text;
const avatarUrl = `https://i.pravatar.cc/150?u=${data.id}`;
return `<div class="d-flex align-items-center">
<img src="${avatarUrl}" alt="${data.text}" width="32" height="32" class="rounded-circle me-2">
<div>
<div class="fw-semibold">${data.text}</div>
<small class="text-muted">ID: ${data.id} โข Online</small>
</div>
</div>`;
},
templateSelection: function(data) {
if (!data.id) return data.text;
const avatarUrl = `https://i.pravatar.cc/150?u=${data.id}`;
return `<div class="d-flex align-items-center">
<img src="${avatarUrl}" alt="${data.text}" width="20" height="20" class="rounded-circle me-1">
<span>${data.text}</span>
</div>`;
}
});
Reinitialize As-Select3 when DOM options change
<select id="my-select" class="form-control">
<option value="">Select a framework...</option>
<option value="react">React</option>
<option value="vue">Vue.js</option>
<option value="angular">Angular</option>
</select>
<button onclick="addNewOption()">Add Option</button>
<button onclick="reinitialize()">Reinitialize</button>
// Initialize As-Select3
const instance = $('#my-select').asSelect3({
placeholder: 'Select a framework...',
searchable: true
})[0]._asSelect3;
function addNewOption() {
// Add new option to the original select element
$('#my-select').append('<option value="nextjs">Next.js</option>');
}
function reinitialize() {
// Get the current instance
const currentInstance = $('#my-select')[0]._asSelect3;
// Reinitialize to pick up new DOM options
const newInstance = currentInstance.reinitializeFromDOM();
// Update reference (optional)
$('#my-select')[0]._asSelect3 = newInstance;
console.log('Reinitialized! New options are now visible.');
}
From simple forms to complex dashboards, Select adapts to your needs
Perfect for contact forms, registration pages, and user surveys with multiple choice questions.
Ideal for admin panels, data filtering, and user management interfaces with complex selections.
Great for product filtering, category selection, and shopping cart options in online stores.
Perfect for assigning team members, selecting permissions, and managing user roles.
Select is free and open source. If you find it useful, consider supporting the project to help us maintain and improve it for everyone.