2010-08-24 6 views
2

J'ai un champ de recherche normal sur ma page Web. Il est rempli de texte: Search this websiteDétection de glisser déposer dans la zone de texte HTML?

Ce texte est supprimé lorsque vous cliquez dans la zone pour taper votre requête de recherche:

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

Mais comment puis-je détecter quand quelqu'un tire texte de la page sur la zone de recherche , comme je le fais souvent moi-même? onfocus n'est pas déclenché et le texte précédent reste.

Répondre

0

Avez-vous essayé d'utiliser l'événement onchange?

BTW, il ya un petit plugin jQuery appelé jquery-defaultvalue qui gère tous les cas d'angle pour vous. Si vous utilisez jQuery de toute façon, cela vaut le coup d'oeil.

+0

j'ai vérifié, et * jquery-defaultvalue * en fait ne gère que les événements de mise au point et le flou. Il ne semble pas qu'il gère tous les cas de coin du tout :-) –

4

Vous devez utiliser l'événement ondrop, qui ne fera que le feu si les ondragenter et ondragover événements sont annulés. Il s'avère que c'est un peu plus compliqué car le comportement est différent dans Firefox que IE, Safari et 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 et Safari. Comme je peux le dire, Opera ne supporte pas l'événement. Au moins, vous pouvez le faire fonctionner pour 95% de vos visiteurs.

Drag Operations - MDC

+0

Support du navigateur? –

+0

@Tim: IE, Firefox, Chrome et Safari (avec exemple de travail). J'ai eu un peu de mal à le faire fonctionner dans Firefox parce que cela change la valeur de l'entrée avant de déclencher l'événement drop. La solution consistait à déplacer la vérification de valeur vers l'événement * ondragover/ondragenter *. Opera est l'intrus, ces événements ne sont pas supportés ici, mais il n'y a aucun mal à les utiliser pour les navigateurs qui les supportent. –

+0

Cool. J'ai semblé me ​​souvenir que c'était un peu difficile la dernière fois que j'ai regardé ce truc. –

Questions connexes