J'ai mis en place un plugin choisi pour un champ de sélection pour que l'utilisateur puisse taper une recherche dans une longue liste.
Bien que je développe cela pour les téléphones mobiles et bien qu'il fonctionne correctement sur ordinateur, il est désactivé sur les deux Apple et Android et l'interface utilisateur par défaut apparaît) pour l'entrée de sélection.
Je voudrais utiliser le plugin sur les téléphones.
Avant d'utiliser un plugin, essayez de vérifier sa portée.
Chosen n'est pas pris en charge sur Android ou IOS, "Chosen est désactivé sur iPhone, iPod Touch et Android appareils mobiles "
Une fonction browser_is_supported
dans chosen.jquery.js
illustre qu'il évite délibérément l'activation sur Android et la plate-forme iPhone ( en raison de plusieurs problèmes UX ). Mais vous pouvez le pirater vous-même.
AbstractChosen.browser_is_supported = function() {
if (window.navigator.appName === "Microsoft Internet Explorer") {
return document.documentMode >= 8;
}
if (/iP(od|hone)/i.test(window.navigator.userAgent)) {
return false;
}
if (/Android/i.test(window.navigator.userAgent)) {
if (/Mobile/i.test(window.navigator.userAgent)) {
return false;
}
}
return true;
};
AbstractChosen.browser_is_supported
la fonction ne vous permet pas d'utiliser ce plugin sur les appareils mobiles et Internet Explorer afin que vous puissiez le pirater vous-même.
Trouvez les lignes ci-dessous dans chosen.jquery.js
et commentez ce code. Maintenant, le plugin choisi fonctionnera sur les appareils mobiles.
if (!AbstractChosen.browser_is_supported()) {
return this;
}
if (!AbstractChosen.browser_is_supported()) {
return;
}
à désactivé dans la tablette mobile
AbstractChosen.browser_is_supported = function () {
if (window.navigator.appName === "Microsoft Internet Explorer") {
return document.documentMode >= 8;
}
//if (/iP(od|hone)/i.test(window.navigator.userAgent))
if ((/iPhone|iPod|iPad|Android|android|playbook|silk|BlackBerry/).test(navigator.userAgent))
{
return false;
}
if (/Android/i.test(window.navigator.userAgent)) {
if (/Mobile/i.test(window.navigator.userAgent)) {
return false;
}
}
return true;
};
Posté ici comme solution de rechange, j'ai implémenté car je dépendais du plugin ChosenJS pour fonctionner afin que le CSS personnalisé puisse être appliqué. J'espère que cela aide quelqu'un d'autre.
Disclaimer: La réponse ci-dessus par @dreamweiver devrait toujours être la réponse acceptée, étant donné la question.
var chosenSelects = $('.ui-select').find('.chosen-select, [chosen]'),
$select, $option;
if (chosenSelects) {
chosenSelects.chosen();
// Check for 'chosen' elements on mobile devices
// -----
// Given that ChosenJS has expressly been disabled from running
// on mobile browsers, the styles have to be applied manually.
// Source: https://github.com/harvesthq/chosen/pull/1388
// -----
// The code below gathers all 'chosen' selectors and adds
// 'chosen-mobile' as a className. This className is then
// used to apply the necessary styles for mobile browsers.
// Within each select, if an 'option' has an empty value,
// then that value will be given 'selected' and 'disabled'
// attributes to act as a placeholder, adopting the text
// in the 'data-placeholder' as the text to be displayed.
if ( /iP(od|hone)/i.test(window.navigator.userAgent)
|| (/Android/i.test(window.navigator.userAgent) && /Mobile/i.test(window.navigator.userAgent)) ) {
chosenSelects.each(function () {
$select = $(this);
$select.addClass('chosen-mobile');
$select.find('option').each(function () {
$option = $(this);
if ( $option.val() == '' ) {
$option
.attr('selected', 'selected')
.attr('disabled', 'disabled')
.text( $select.data('placeholder') );
}
});
});
}
}
Avec cela, j'utilise ensuite .ui-select .chosen-mobile
pour appliquer le CSS nécessaire.
Pour moi, c'était cette ligne:
}, AbstractChosen.browser_is_supported = function() {
return "Microsoft Internet Explorer" === window.navigator.appName ? document.documentMode >= 8 : /iP(od|hone)/i.test(window.navigator.userAgent) ? !1 : /Android/i.test(window.navigator.userAgent) && /Mobile/i.test(window.navigator.userAgent) ? !1 : !0
}
changé à cela et cela a fonctionné comme un charme.
}, AbstractChosen.browser_is_supported = function() {
return true;
}