11540 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

J'ai un petit soucis avec l'utilisation de RegExp, je ne comprend pas pourquoi j'obtiens un résultat différent selon que j'utilise le Code1 ou le Code2.
Je précise que le formulaire test sur lequel porte ce bout de script est le même dans les deux cas.

Code1
if (field.val() && methods.match(/equalTo\[(.*?)\]/)) {
	var to = field.parents('form').find('input[name=' + RegExp.$1 + ']');
	alert(to.val());
}

Ici, alert affiche "undefined".

Code2
if (field.val() && methods.match(/equalTo\[(.*?)\]/)) {
	var name = RegExp.$1;
	var to = field.parents('form').find('input[name=' + name + ']');
	alert(to.val());
}

Ici, alert affiche bien le nom de l'input.

Pourrait-on m'expliquer pourquoi cette différence ?
Modifié par Generalissime (01 Nov 2014 - 17:07)
Merci pour ta réponse, donc voici le nouveau code:

if (field.val() && methods.match(/equalTo\[(.*?)\]/)) {
	console.log(RegExp.$1);
	var to = field.parents('form').find('input[name=' + RegExp.$1 + ']');
	alert(to.val());
}


La console m'affiche bien le nom de l'input, mais l'alert non. En fait je crois avoir compris que RegExp.$1 n'a pas la portée suffisante pour être utilisé comme une variable standard.
Modifié par Generalissime (03 Nov 2014 - 13:29)
Et si tu essayes :

if (field.val() && methods.match(/equalTo\[(.*?)\]/)) {
	console.log(RegExp.$1);
	var to = field.parents('form').find('input[name="' + RegExp.$1 + '"]');
	alert(to.val());
}


Non ?
Ca affiche quoi ton RegExp.$1 ? Parce que là je vois pas ce que c'est mais c'est pas ton histoire de portée, dans ton cas ça n'a aucun sens...
Ok, j'ai un formulaire comme suit :

<form>
	<label>Mot de passe</label>
	<input type="password" name="password" />
	<label>Confirmation</label>
	<input type="password" name="check-password" data-method="equalTo[ password ]" />
	<button type="submit">Valider</button>
</form>


* Il n'y a pas d'espace normalement entre les crochets et "password" mais ça affiche un smiley sinon :s
Donc le but c'est d'afficher le nom du champ que l'on confirme: "password". Là je lance le script de validation et lorsqu'on arrive au niveau du bout de script donné précédemment, on a :

field = $('input[name="check-password"]');
methods = field.attr('data-method');


Normalement, que ce soit le Code1 ou le Code2, RegExp.$1 devrait retourner "password" mais dans le premier cas, ça ne fonctionne pas :s
Modifié par Generalissime (03 Nov 2014 - 19:39)