Отключить выделение текста при двойном щелчке - PullRequest
1 голос
/ 10 марта 2012

Я работаю в приложении GWT, которое будет иметь два RichTextAreas.В каждом из них будет одно и то же предложение, но на разных языках.Когда пользователь нажимает слово, оно будет выделено вместе с его соответствием в другом RichTextArea.Когда пользователь дважды щелкает слово, а не слова, его фрагменты будут выделены.Поскольку событие двойного щелчка никогда не вызывается (я не знаю почему), я создал свой собственный класс, который расширяет RichTextArea, и я сам вызвал событие двойного щелчка (в зависимости от времени, прошедшего между двумя нажатиями).

Проблема в том, что я не могу отключить выбор текста по умолчанию.Я искал возможные решения, но я не нашел ни одного, который действительно работал.Я пробовал как с CSS, так и с JavaScript.Вот как выглядит мой класс:

public class MyRichTextArea extends RichTextArea
{
    private boolean clickedOnce = false;
    private int msDelay = 250;

    public MyRichTextArea()
    {
        sinkEvents(Event.ONMOUSEDOWN);
                disableTextSelectInternal(this.getElement());
    }

    public void onBrowserEvent(Event event)
        {
        switch (DOM.eventGetType(event))
        {
            case Event.ONMOUSEDOWN:
                if (!clickedOnce)
                {
                    clickedOnce = true;
                    Timer t = new Timer() 
                    {
                        public void run() 
                        {
                            if (clickedOnce)
                            {
                                clickedOnce = false;
                                raiseEvent(1);
                            }
                        }
                    };
                    t.schedule(msDelay);
                }
                else
                {
                    clickedOnce = false;
                    raiseEvent(2);
                }
                //DOM.eventPreventDefault(event);
                break; 

        }
    }

    public void raiseEvent(int clickCount)
    {
        if (clickCount == 1)
        {
            this.fireEvent( new GwtEvent<ClickHandler>() 
                {
                    public com.google.gwt.event.shared.GwtEvent.Type<ClickHandler> getAssociatedType() 
                    {
                        return ClickEvent.getType();
                    }

                    protected void dispatch(ClickHandler handler) 
                    {
                        handler.onClick(null);
                    }
                });
        }
        else
        {
            this.fireEvent( new GwtEvent<DoubleClickHandler>() 
                    {
                        public com.google.gwt.event.shared.GwtEvent.Type<DoubleClickHandler> getAssociatedType() 
                        {
                            return DoubleClickEvent.getType();
                        }

                        protected void dispatch(DoubleClickHandler handler) 
                        {
                            handler.onDoubleClick(null);
                        }
                    });
        }
    }

    protected native static void disableTextSelectInternal(Element e)
    /*-{
            e.ondrag = function () { return false; };
            e.onselectstart = function () { return false; };
            e.onmousedown = function () { return false; }
            e.style.MozUserSelect="none"
    }-*/;
}

Я выбрал этот метод отсюда: http://comments.gmane.org/gmane.org.google.gwt/49564,, но он не работает для меня.Я думаю, это должно быть сделано с помощью JavaScript.Я немного новичок в JavaScript и не знаю с чего начать.Если кто-то сталкивался с этой проблемой ранее или имеет какое-либо возможное решение, любая помощь будет оценена.

Заранее спасибо

1 Ответ

2 голосов
/ 12 февраля 2013

Я полагаю, вы ищете теги CSS.Они выглядят следующим образом:

-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;

Для того, чтобы внедрить их в ваш объект через Java, вы ищете что-то вроде этого:уже установлен CSS элемента.Надеюсь, что это ответ, который вы ищете!

...