2009-10-06 28 views
29

Wprowadzam funkcję wyboru elementów w javascript (przy użyciu jQuery). pozycja jest li zawierająca trochę html.
użytkownik może kliknąć jeden element (zaznacza go), a następnie kliknąć inny element w Shift, aby zaznaczyć wszystkie elementy znajdujące się pomiędzy. to zasadniczo działa poprawnie, jednak kliknięcie z przesunięciem również wybiera (higtlights) tekst, który pojawia się wewnątrz elementów (podstawowa funkcjonalność przeglądarki dla kliknięć shift). czy jest jakiś sposób, aby to wyłączyć?wyłącza zaznaczanie tekstu, naciskając "shift"

Odpowiedz

35

Spróbuj combo JavaScript i css, aby uniemożliwić wybór w pierwszej kolejności:

$('li').attr('unselectable', 'on'); // IE 

css (dla przeglądarek nie IE):

li { 
      user-select: none; /* CSS3 (little to no support) */ 
     -ms-user-select: none; /* IE 10+ */ 
     -moz-user-select: none; /* Gecko (Firefox) */ 
    -webkit-user-select: none; /* Webkit (Safari, Chrome) */ 
} 
+0

Należy zauważyć, że nie zaznaczone = "on" musi być również we wszystkich węzłach podrzędnych (np. Div, p). Nawet widget w checkboxie można klikać z wciśniętym klawiszem Shift. –

+0

To nie odnosi się do części "podczas naciskania zmiany". Zobacz odpowiedź @Anthony Mills. – ahlexander

26

Spróbuj tego po Shift + kliknięcie ...

document.getSelection().removeAllRanges(); 

Jeśli to nie jest wystarczająco skuteczne, konieczne może być również anulować onselectstart imprezę ...

window.onload = function() { 
    document.onselectstart = function() { 
    return false; 
    } 
} 
+1

+1 za anulowanie wyboru. –

18

Mam taką aplikację. Trick jest, chciałem pozwolić na wybór, ale chciałem również kliknąć Ctrl-kliknięcie i Shift-kliknąć, aby wybrać elementy.

Co znalazłem było to, że wszyscy, ale IE pozwala na pokonanie tego poprzez anulowanie zdarzenia mouseDown, w IE, co działa najlepiej, aby tymczasowo wyłączyć onselectstart:

$("#id").mousedown(function (e) { 
    if (e.ctrlKey || e.shiftKey) { 
     // For non-IE browsers 
     e.preventDefault(); 

     // For IE 
     if ($.browser.msie) { 
      this.onselectstart = function() { return false; }; 
      var me = this; // capture in a closure 
      window.setTimeout(function() { me.onselectstart = null; }, 0); 
     } 
    } 
}); 
+2

To był sekret, którego szukałem. W przeglądarce Chrome pojawił się chwilowy błysk wyboru, a Safari musiała dodać także "document.getSelection(). RemoveAllRanges();" – prototype

5

Jeśli masz wyboru w swoich wierszach tabeli (przedmioty), możesz po prostu ustawić fokus na polu wyboru wiersza po dokonaniu wyboru. Koncentrując się na polu wyboru, należy pozbyć się wyboru przeglądarki. Możesz także skupić się na polu tekstowym lub innym elemencie formularza. Dla JQuery,

$('tr').bind('click', function(e) { 
    // If shift key was down when the row was clicked 
    if (e.shiftKey) { 
    // Make the row selected 
    $(this).parent().children().slice($(last).index(), $(this).index()+1).addClass('selected').find('input:checkbox').attr('checked', true); 

    // Now focus on the checkbox within the row 
    $('input:checkbox', $(this)).focus(); 
    } 
}); 
Powiązane problemy