Le titre n'est peut-être pas correct mais je ne savais pas comment poser ma question! J'ai rencontré un problème avec le mot clé this. Tout en l'utilisant comme dans ce code <input type="text" onkeyup="this.value=this.value.toUpperCase();"></input> cela fonctionne parfaitement. Mais quand j'attribue une fonction sur l'élément d'entrée qui utilise le mot clé this, cela ne fonctionne pas comme dans
HTML

<input type="text" onkeyup="up();"></input>

Javascript

function up()
{   
    this.value=this.value.toUpperCase();
}
0
john scott 18 juil. 2015 à 15:44

3 réponses

Meilleure réponse

Essayez d'étendre le prototype des éléments DOM avec la fonction:

HTMLInputElement.prototype.up = function() {
    if(this.type == "text") {
        this.value = this.value.toUpperCase();
    }
};
<input type="text" onkeyup="up();" placeholder="type something" />


mais je vous recommande strictement d'utiliser jquery pour cela, car je ne pense pas que HTMLInputElement persistera toujours sur tous les navigateurs:


$(function(){
  
  $('input.to-uppercase')
    .on('keyup', function(){$(this).val($(this).val().toUpperCase());});
    
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<input type="text" class="to-uppercase" placeholder="write something">
0
num8er 18 juil. 2015 à 13:29

Vous pouvez également utiliser la chose probablement la plus horrible qu'offre JavaScript:

onclick="up.call(this);"

call(...) définit fondamentalement le this à l'intérieur d'une fonction à une valeur spécifique, dans ce cas à l'élément.

1
momar 18 juil. 2015 à 13:20

ce ici ne sera pas l'élément, vous devez le transmettre depuis le DOM, utilisez-le comme ceci

<input type="text" onkeyup="up(this);"></input>

Votre fonction

function up(el)
{   
    el.value=el.value.toUpperCase();
}
8
Ahmed Eid 18 juil. 2015 à 13:12