Ci sono vari problemi in quel codice.

Anzitutto un'incongruenza: usi l'evento onblur (che scatta togliendo il focus al campo), e poi vai a testare l'ultimo tasto premuto.

Comunque i keyCode usali solo se strettamente necessario: sono interpretati inmodo diverso nei vari browser.

Altro problema: un campo input senza form: in qualche browser non funziona.


Vedi queste modifiche (nota anche la sintassi):
codice:
<body>
  <form action="#">
    <input type="text" name="telefono" onblur="soloNum(this);" />

    <input type="text" name="pippo" />
  </form>
</body>

che deve corrispondere al JS (da inserire nella head)

function soloNum(cc) {
  if(cc.value.match(/^\+*\d+$/) ) {
    return true;
  } else {
    alert("solo numeri - eventualmente preceduti da +");
    cc.value = "";
    return false;
  }
}
Se vuoi permettere gli spazi nel numero, la RegExp diventa:
/^\+*[\d ]+$/