Sto usando l'interfaccia utente jQuery Plugin selezionabile. Voglio selezionare un articolo alla volta. Ma l'interfaccia utente selezionabile di jQuery consente la selezione multipla facendo clic/trascinando/tenendo premuto il tasto CTRL. C'è un modo per impedire la selezione multipla?Come impedire la selezione multipla nell'interfaccia utente jQuery Plugin selezionabile
risposta
Non esiste un modo definito. Tuttavia, è possibile passare una funzione di callback per eventi "Start" o "Selected", che annulla la selezione se è selezionato più di un elemento.
Una interessante discussione su questo argomento è disponibile su this jQuery forum thread.
Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - [Dalla recensione] (/ recensione/post di bassa qualità/18032764) – mx0
Sì, è possibile impedire questo comportamento, è sufficiente impostare l'opzione toletance per 'fit'
Questo risolve parte del problema - ha ancora bisogno di un modo per impedire all'utente di tenere premuto il tasto Ctrl e selezionando gli elementi con il tasto sinistro del mouse fare clic su – Adam
significa che devi lazare l'intera riga piuttosto che una qualsiasi parte della riga –
È possibile creare il plugin personalizzato come questo:
$.widget("xim.singleSelectable", {
options: {
select: null
},
_create: function() {
var self = this;
this.element.addClass('ui-selectable');
this.element.delegate('li', 'click', function (e) {
self.element.find('>li').removeClass('ui-selected');
$(this).addClass('ui-selected');
if ($.isFunction(self.options.select)) {
self.options.select.apply(self.element, [e, this]);
}
});
},
selected: function() {
return this.element.find('li.ui-selected');
},
destroy: function() {
$.Widget.prototype.destroy.apply(this, arguments); // default destroy
}
});
quello che ho fatto, è che mi permetto multipla selezione, ma quando la selezione viene effettuata, mantengo solo il primo elemento selezionato
<ul id="select">
<li>Row 1</li>
<li>Row 2</li>
<li>Row 3</li>
</ul>
Questo seleziona tutti gli elementi selezionati eccetto il primo ed elimina lo stato selezionato. Alla fine, verrà selezionato solo un elemento. event.target corrisponde al mio ul elemento.
$('#select').selectable({
stop:function(event, ui){
$(event.target).children('.ui-selected').not(':first').removeClass('ui-selected');
}
});
So che questo tema è un pò vecchio, ma ho ancora imbattuto su di esso, in modo che possa essere utile a qualcun altro
vecchia o meno, tu mi hai indicato nella giusta direzione. Grazie dood – iLLin
Grazie, bella mod :-) – ljs
Come te, ho appena trovato questa domanda. Ho scritto una soluzione all'indirizzo [http://stackoverflow.com/a/13727528/1747491](http://stackoverflow.com/a/13727528/1747491) che ritengo sia più pulito. Questo metodo fa sì che lo stile '.ui-selection' sia molto evidente. Inoltre, quando si prova a selezionare la lista, è necessario deselezionare l'elemento attualmente selezionato (non per l'alto). – theblang
Questa potrebbe essere una soluzione migliore:
$('#selectable').selectable({
selecting: function (event, ui) {
$(event.target).children('.ui-selecting').not(':first').removeClass('ui-selecting');
}
});
Ecco un soluzione più generale di quelli precedentemente pubblicati:
$element.selectable({
selecting: function (e, ui) {
// force single selection
$(e.target).find('.ui-selectee.ui-selecting').not(ui.selecting).removeClass('ui-selecting');
$(e.target).find('.ui-selectee.ui-selected').not(ui.selecting).removeClass('ui-selected');
}
});
(I selectees potrebbero non essere sempre figli del selezionabile, e tenendo premuto il "primo" selecte provoca un comportamento strano quando si ctrl + clic.)
Questo ha funzionato per me. Impedisce il "lassoing" di più righe e ctrl + clic.
$(function() {
$("#selectable").selectable({
selecting: function(event, ui){
if($(".ui-selected, .ui-selecting").length > 1){
$(ui.selecting).removeClass("ui-selecting");
}
}
});
});
Ha funzionato come un fascino! È meglio cambiare '$ (". Ui-selected, .ui-selection "). Length' a' this.element.find (". Ui-selected, .ui-selection"). Length'. – deerchao
Non sono sicuro di aver compreso il consiglio di cambiare. Ecco il '$ (". Ui-selected, .ui-selection "). Length' [versione che sembra funzionare] (http://jsfiddle.net/ftL8w/). Ecco 'this.element.find (". Ui-selected, .ui-selection "). Length' [versione che sembra rotta] (http://jsfiddle.net/xTr6F/1/), che lancia il seguente error: 'Errore: impossibile ottenere il valore della proprietà 'find': object is null' Sono abbastanza nuovo per jQuery, e sto solo cercando di capire. – twip
Ho riportato questo alla mia risposta originale, poiché questo è il codice funzionante che sto effettivamente utilizzando. Grazie per l'heads up twip. – kyle
Ci sono alcune buone soluzioni qui, ma la maggior parte di esse presuppone che si desidera sempre selezionare il primo elemento come appare nel DOM in un caso di selezione multipla.
Per ovviare a ciò, tengo una variabile (lastSelection
) che contiene l'ultimo elemento che è stato richiesto correttamente (anziché il primo nel DOM) a cui fare il fallback nel caso di una selezione indesiderata.
var lastSelection;// this will record our last successful selection
$('#selectable').selectable({
filter: '.element',
selecting: function() {
if ($('.ui-selecting').length > 1) {
// if selecting multiple (lasso) we will ignore the selection and fallback
$('.ui-selecting').removeClass('ui-selecting');
$(lastSelection).addClass('ui-selecting');// if no value, nothing will be selected
}
},
stop: function() {
if ($('.ui-selected').length > 1) {
// looks like we have an invalid selection, fallback to lastSelection
// this handles the ctrl (windows), cmd (OSX) multi-select cases
$('.ui-selected').removeClass('ui-selected');
$(lastSelection).addClass('ui-selected');// if no value, nothing will be selected
} else {
if ($('.ui-selected').first().is('.element')) {
// if we successfully found a selection, set it as our new lastSelection value
lastSelection = $('.ui-selected')[0];
}
}
}
});
Nota: Se si desidera deselezionare senza Ctrl/Cmd + clic si dovrà implementare un work-around con questo metodo.
Desidero anche precisare che tolerance: 'fit'
richiede semplicemente che il laccio circonda completamente un elemento di destinazione per selezionarlo, non disabiliterà la selezione del laccio a meno che gli elementi non possano essere circondati nell'area del lazo disponibile. http://api.jqueryui.com/selectable/#option-tolerance
Se si desidera disabilitare la selezione multipla non consecutiva ma si desidera comunque mantenere la selezione di trascinamento, è possibile farlo.
stop: function(event, ui) {
if($(".ui-selected, .ui-selecting").length > 1){
var elems = $('.ui-selected, .ui-selecting');
for(var i = 0; i < elems.length - 1; i++){
if($(elems[i]).closest('td').next('td').text() != $(elems[i+1]).text()){
//Non consecutive selection detected
}
}
}
}
Controlla essenzialmente se tutti gli elementi sono uno accanto all'altro.
- 1. Interfaccia utente JQuery Plugin selezionabile: la barra di scorrimento non è selezionabile quando div overflow
- 2. Jquery selezione multipla
- 3. QListWidget e selezione multipla
- 4. come selezionare le opzioni nell'elenco di selezione multipla con jQuery?
- 5. jQuery UI ordinabile e selezionabile
- 6. C'è un plugin JQuery che combina Draggable e selezionabile
- 7. Opzioni di selezione multipla jenkins
- 8. JcomboBox selezione multipla
- 9. VirtualizingStackPanel + MVVM + multipla selezione
- 10. Selezione multipla in Vim
- 11. Disabilita selezione multipla?
- 12. JavaFX ListView Selezione multipla
- 13. Le migliori pratiche per l'interfaccia utente web di selezione multipla?
- 14. UITableView - Selezione multipla E selezione singola
- 15. Interfaccia utente semantica: selezione multipla dei valori di selezione a discesa
- 16. Materializza caselle di selezione multipla
- 17. WAM XAML: Come disabilitare la selezione multipla in un DataGrid?
- 18. Selezione multipla in un TreeView
- 19. Selezione multipla da matrice Julia
- 20. ottiene l'opzione deselezionata dall'elenco di selezione multipla
- 21. Impedire l'apertura del menu di selezione
- 22. Ricerca di componente di selezione multipla, scorrevole, per Bootstrap
- 23. plugin jQuery scelto - ottenere dati utilizzando PHP
- 24. Ottieni ciascun valore selezionato usando il plugin jquery selezionato
- 25. come deselezionare tutte le opzioni nel widget di selezione multipla
- 26. Come chiamare la funzione nel plugin jquery?
- 27. SQL deadlock tra selezione/aggiornamento o selezione multipla
- 28. Ruby on Rails - selezione multipla in f.select
- 29. jQuery selettori multipla ID
- 30. SQLite che ottimizza l'inserto a selezione multipla
grazie per la vostra risposta. Proverò a seguire la tua strada – miti737
Ciao, Come posso evitare di selezionare la voce quando tiene premuto il tasto CTRL? – miti737