soupagain
soupagain

Reputation: 1133

Detecting drag drop to HTML textbox?

I have a normal search box on my webpage. It is filled with text: Search this website

This text is removed when you click into the box to type your search query:

onfocus="if(this.value=='Search this website') { this.value=''};

But how can I detect when someone drags text from the page onto the search box, as I often do myself? onfocus is not triggered and the previous text remains.

Upvotes: 2

Views: 3595

Answers (3)

Andy E
Andy E

Reputation: 344803

You need to use the ondrop event, which will only fire if the ondragenter and ondragover events are cancelled. Turns out it's a bit trickier than that because the behavior is different in Firefox than IE, Safari and Chrome.

(function () {
    var inp = document.getElementById("test"),
        chg = false;

    inp.ondragover = inp.ondragenter = function () {
        chg = inp.value == "Drop here";
        return false;
    }
    inp.ondrop = function (evt) {
        evt = evt || event;

        if (chg) {
            this.value = evt.dataTransfer.getData("text")
                         || evt.dataTransfer.getData("text/plain");
            return false;
        }
    }
})();

Example - Firefox 3+, IE5+, Chrome and Safari. Near as I can tell, Opera doesn't support the event. At least you can get it working for 95% of your visitors though.

Drag Operations - MDC

Upvotes: 4

ajile
ajile

Reputation: 686

See - http://www.simplecoding.org/drag-drop-s-ispolzovaniem-html5.html , but page on the russian language (Google Translate would help).

Upvotes: 0

Benjamin Wohlwend
Benjamin Wohlwend

Reputation: 31898

Have you tried to use the onchange event?

BTW, there is a nifty little jQuery plugin called jquery-defaultvalue which handles all the corner cases for you. If you're using jQuery anyway, it's worth a look.

Upvotes: 0

Related Questions