2010-07-29 8 views
2

Je suis un débutant total quand il s'agit de Javascript/jQuery alors j'espère que vous pouvez m'aider.Bande "http: //" du texte collé dans la zone de texte

J'ai une zone de texte dans laquelle la plupart des gens vont coller des liens. Existe-t-il un moyen agréable pour la zone de texte de détecter qu'un lien a été collé (commence par http://), puis supprime le protocole dynamiquement dans la zone de texte sans avoir à appuyer sur un bouton ou plus tard?

+0

Voulez-vous à bande le « http: // » immédiatement dès qu'il est tapé/collé ou tout simplement sur présentation d'un forme? – Ryan

+3

Que se passe-t-il si quelqu'un colle un lien 'https'? –

Répondre

2

En supposant que vous voulez dépouillé dès que les types d'utilisateur/pâtes il:

Disons que pour l'amour des arguments que vous avez donné l'entrée de texte l'id « url »:

$(document).ready(function(){ 

    var timer; 

    $("#url").live("keyup",function(){ 
     clearTimeout(timer); 

     timer = setTimeout(function(){ 
      var textbox = $("#url"); 
      if (textbox.val().indexOf("https://") == 0) 
       textbox.val(textbox.val().substring(8)); 
      if (textbox.val().indexOf("http://") == 0) 
       textbox.val(textbox.val().substring(7)); 
     },500); 
    }); 
});​ 

Comme mentionné par @Marcel Korpel dans les commentaires cela devrait maintenant prendre soin de ce que vous voulez.

+0

Vous pouvez également faire 'onkeypress' en combinaison avec un timer (de (par exemple) une seconde, donc une seconde après que la dernière touche est enfoncée, le champ de formulaire change). Et oui, j'ai vu des URL avec 'http: //' au milieu, quand on utilise un site comme une sorte de proxy (pour accéder à des sites d'une autre adresse IP qui a un abonnement, par exemple: 'https: // www.example.com/access/http: // hiddensite.org'). –

+0

@Marcel: s'il vous plaît voir mon post révisé ci-dessus et laissez-moi savoir si cela fonctionne. Je fixe le retard à seulement une demi-seconde par opposition à une seconde complète, mais cela est facilement changé. – Ryan

+0

cela [fonctionne] (http://jsbin.com/ihopu/edit#preview), même si je ne suis pas sûr si cela fonctionne pour le problème réel de l'OP;), car il dépouille le protocole indépendamment du fait qu'il est 'http : 'ou' https: ', ce qui rend plusieurs sites inaccessibles (en rattachant' http: 'dans la sortie). –

2

Vous pouvez utiliser string.replace(), JavaScript de base vraiment, il accepte réellement une regex, donc string.replace(/^http:\/\//,"") devrait suffire.

+1

Cela supprime également 'http: //' quand il est au milieu d'une chaîne –

+0

C'est très vrai oui, devinez que vous devez faire quelque chose comme une regex^http: // – Lloyd

+0

Ajout de la version regex, cela devrait faire comme pensé. – Lloyd

2

Cela vérifie pour s'assurer qu'il commence par http: // et remplace ensuite cela.

$(document).ready(
    function() 
    { 
     $("#url").change(
      function() 
      { 
       var textbox = $(this); 
       if (textbox.val().indexOf("http://") == 0) 
        textbox.val(textbox.val().substring(7)); 
      }); 
    });​ 

Voici également un exemple de travail pour vérifier: http://jsfiddle.net/epwDA/4/

+0

Merci! Pas aussi bon que la solution de Ryan, mais cela a aussi fonctionné comme un charme. Je vais marquer cette réponse comme utile quand je peux (apparemment im trop nouveau à ce site pour le faire encore ..) Et merci pour le conseil sur jfiddle – larschanders

Questions connexes