Esse código abaixo, possui uma função que no evento onblur do campo, adiciona o dígito nove para telefones com ddd 11, caso o usuário tenha informado um telefone de dígito 11 e não tenha informado o nove.

Completo do post Mascara campo de telefone em javascript com regex – Nono dígito – Telefones São Paulo

<html>
<head>
    <title>Mascara Telefone</title>
<script type="text/javascript">
/* Máscaras ER */
function mascara(o, f) {
    v_obj = o;
    v_fun = f;
    setTimeout(execmascara, 1);
}
function execmascara() {
    v_obj.value = v_fun(v_obj.value)
}
function mtel(v) {
    v=v.replace(/\D/g,"");
    v=v.replace(/^(\d{2})(\d)/g,"($1) $2");
    v=v.replace(/(\d)(\d{4})$/,"$1-$2");
    return v;
}
function id(el) {
	return document.getElementById(el);
}
window.onload = function() {
	var $telefone = id('telefone');
	$telefone.onkeyup = function() {
		mascara( this, mtel );
	}
	$telefone.onblur = function() {
		var v = this.value;
		if( v.indexOf('(11)') !== -1 && v.length === 14) {
			this.value = v.replace(/\((\d{2})\) (\d{4})-(\d{4})/g,'($1) 9$2-$3');
		}
	}
}
</script>

</head>
<body>

    <input type="text" name="telefone" id="telefone" maxlength="15" />

</body>
</html>