Estoy usando el plugin jQuery UI seleccionable. Quiero seleccionar un elemento a la vez. Pero el complemento jQuery UI seleccionable permite la selección múltiple haciendo clic/arrastrando/sosteniendo la tecla CTRL. ¿Hay alguna manera de evitar la selección múltiple?Cómo evitar la selección múltiple en jQuery UI Complemento seleccionable
Respuesta
No hay una manera definida. Sin embargo, puede pasar una función de devolución de llamada para eventos "Inicio" o "Seleccionado", que cancela la selección si se selecciona más de un elemento.
Una discusión interesante acerca de esto se puede encontrar en this jQuery forum thread.
Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. - [De la opinión] (/ revisión/mensajes de baja calidad/18032764) – mx0
sí, se puede evitar este comportamiento, acaba de establecer la opción toletance de 'ajuste'
Esto resuelve parte del problema - aún necesita una forma de evitar que el usuario mantenga presionada la tecla Ctrl y seleccionar elementos con el botón izquierdo del mouse haga clic en – Adam
todo esto significa que debe enlazar toda la fila en lugar de solo una parte de la fila –
Usted puede crear su complemento personalizado como esto:
$.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
}
});
lo que hice, es que permiten que múltiples selección, pero cuando se realiza la selección, i solamente guardar el primer elemento seleccionado
<ul id="select">
<li>Row 1</li>
<li>Row 2</li>
<li>Row 3</li>
</ul>
Esto selecciona todos los elementos seleccionados excepto el primero y borra el estado seleccionado. Entonces, al final, solo se seleccionará un elemento. event.target corresponde a mi elemento ul.
$('#select').selectable({
stop:function(event, ui){
$(event.target).children('.ui-selected').not(':first').removeClass('ui-selected');
}
});
Sé que este tema es un poco viejo, pero todavía topé con él, por lo que puede ser útil a alguien más
Antigua o no, usted me apuntó en la dirección correcta. Gracias, dood. – iLLin
Gracias, buen hack :-) – ljs
Como usted, acabo de encontrar esta pregunta. Escribí una solución en [http://stackoverflow.com/a/13727528/1747491](http://stackoverflow.com/a/13727528/1747491] que considero más limpia. Este método hace que el estilo '.ui-selection' sea muy notable. Además, cuando intentes seleccionar la lista, debes anular la selección del elemento seleccionado actualmente (no así para arriba). – theblang
Esto podría ser una solución mejor:
$('#selectable').selectable({
selecting: function (event, ui) {
$(event.target).children('.ui-selecting').not(':first').removeClass('ui-selecting');
}
});
Aquí hay una solución más general que los publicados anteriormente:
$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');
}
});
(Los seleccionados pueden no ser siempre hijos de seleccionable, y aferrándose al "primer" seleccionado causa un comportamiento raro cuando se presiona Ctrl + clic.)
Esto funcionó para mí. Evita "enlazar" múltiples filas y ctrl + clic.
$(function() {
$("#selectable").selectable({
selecting: function(event, ui){
if($(".ui-selected, .ui-selecting").length > 1){
$(ui.selecting).removeClass("ui-selecting");
}
}
});
});
¡Funcionó como un encanto! Simplemente mejor para cambiar '$ (" .ui-selected, .ui-selecting "). Length' a' this.element.find (".ui-selected, .ui-selecting"). Length'. – deerchao
No estoy seguro de entender los consejos para cambiar. Aquí está el '$ (" .ui-selected, .ui-selecting "). Length' [versión que parece funcionar] (http://jsfiddle.net/ftL8w/). Aquí está el 'this.element.find (" .ui-selected, .ui-selecting "). Length' [versión que parece rota] (http://jsfiddle.net/xTr6F/1/), que arroja lo siguiente error: 'Error: no se puede obtener el valor de la propiedad 'buscar': el objeto es nulo' Soy bastante nuevo en jQuery, y solo estoy tratando de entenderlo. – twip
Lo devolví a mi respuesta original, ya que este es el código de trabajo que estoy usando. Gracias por el twip heads up. – kyle
Aquí hay algunas buenas soluciones, pero la mayoría supone que siempre debe seleccionar el primer elemento como aparece en el DOM en un caso de selección múltiple.
Para remediar esto, conservo una variable (lastSelection
) que contiene el último elemento que se solicitó con éxito (en lugar del primero en el DOM) al cual recurrir en el caso de una selección no deseada.
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: Si desea cancelar la selección sin ctrl/cmd + clic tendrá que implementar una solución alternativa a este método.
También quería señalar que tolerance: 'fit'
requiere simplemente que el lazo rodea completamente un elemento de destino con el fin de seleccionarlo, no va a desactivar la selección de lazo a menos que sus elementos no pueden estar rodeados en la zona de lazo disponible. http://api.jqueryui.com/selectable/#option-tolerance
Si desea deshabilitar la multiselección no consecutiva pero desea conservar la selección de arrastre, puede hacerlo.
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
}
}
}
}
Comprueba esencialmente si todos los elementos están uno al lado del otro.
- 1. Deshabilitar ctrl-clic en jquery ui seleccionable
- 2. jQuery UI ordenable y seleccionable
- 3. jQuery Chosen.js - ¿cómo buscar en selección múltiple?
- 4. Cómo implementar funcionalidad de alternar en JQuery UI Seleccionable?
- 5. Habilitar Shift-Multiselect en jQuery UI seleccionable
- 6. Múltiple seleccionable GridView
- 7. cómo encontrar los elementos seleccionados con Jquery UI seleccionable
- 8. Jquery selección múltiple
- 9. ¿Existe un complemento JQuery que combine Arrastrable y seleccionable
- 10. jQuery UI seleccionable: anule la selección del elemento al hacer clic
- 11. cómo evitar el evento de selección predeterminado en autocompletar jquery
- 12. JQuery UI Complemento seleccionable: hacer que la barra de desplazamiento no se pueda seleccionar cuando div se desborda
- 13. ¿Cómo se alterna la selección de una opción en una selección múltiple con jQuery?
- 14. usando jQuery UI - ajuste de ancho en un cuadro de selección múltiple en particular
- 15. Programmáticamente 'deseleccionar' un widget seleccionable de jQuery UI
- 16. ¿Cómo evitar la misma subconsulta en la selección múltiple en el oráculo?
- 17. jQuery UI múltiples de selección de arrastre
- 18. cómo evitar que jquery (o jquery ui) establezca ui-state-disabled en un div?
- 19. Selección múltiple en TreeView
- 20. Selección múltiple en Vim
- 21. Opción añadir dinámicamente al plugin elegido JQuery de selección múltiple
- 22. UITableView Selección múltiple
- 23. 'actualizar' jquery UI menú de selección después de la actualización
- 24. Selección múltiple ListPreference en android
- 25. Cambiar la selección en una selección con el complemento elegido
- 26. cómo evitar jQuery UI arrastrable desde también activar evento click
- 27. VirtualizingStackPanel + MVVM + selección múltiple
- 28. ¿Deshabilitar selección múltiple?
- 29. Cómo evitar que el control deslizante jQuery UI se superponga?
- 30. Selección múltiple de JcomboBox
gracias por su respuesta. Trataré de seguir tu camino – miti737
Hola, ¿Cómo puedo evitar seleccionar un elemento cuando contiene la tecla CTRL? – miti737