J'essaie de faire une boîte de dialogue de confirmation en utilisant jquery, le formulaire est soumis, mais il n'a pas fait la condition if, j'avais un formulaire .table qui contient plusieurs tables .profit. Lors de l'envoi, je veux vérifier chaque salePrice et coût dans la .profit colonne du tableau, if cost > salePrice, ne pas soumettre, sinon soumettre.

Le problème est que la page alerte toujours la fenêtre de confirmation, je ne sais pas pourquoi. voici ce que j'ai:

$(".table").submit(function(event) {
  $('.salePrice').each(function() {
  var $table = $(this).parents('.profit');
  var cost = $table.find('.cost').val();
    if( $( this ).val() < cost ) {
      if(confirm("cost is larger than salePrice, are you sure?")){
          result = true;
          return false;
        } else {
          result = false;
          return false;
        }
    }
 });
 if (result) {
    return true;
  }
  else {
    return false;
 }});

Si l'utilisateur clique sur, confirmez qu'il vérifiera la météo, soumettez le formulaire ou non. J'espère que cela a du sens. Merci.

HTML dans jsfiddle: https://jsfiddle.net/6jjhmb7L/1/

1
Doran Wu 16 janv. 2017 à 06:56

2 réponses

Meilleure réponse

J'essaye parseInt et ajoute un gestionnaire, puis corrige!

$(".table").submit(function(event) {
var isOK = true, r = false;

$('.salePrice').each(function() {
  var $table = $(this).parents('.profit');

  var cost = $table.find('.cost').val();

    if (parseInt ($(this).val (), 10) < parseInt (cost, 10)) {
      if (!r) r = confirm ("cost is larger than salePrice, are you sure?");
      isOK = isOK & r;
    }
});

if (isOK) {
  return true;
} else {
  return false;
}});
0
Doran Wu 18 janv. 2017 à 04:14

Votre navigateur interprète les valeurs comme des chaînes (par exemple: "4.99") et la comparaison se produit sur les valeurs de chaîne, il s'agit donc d'une comparaison alpha au lieu d'une comparaison numérique. Essayez d'intégrer parseInt. De plus, je pense que votre logique est inversée dans la dernière instruction if, et j'ai eu un problème lors de son exécution car le «résultat» n'était pas défini. Essaye ça:

$(".table").submit(function(event) {
  var result = true;
  $('.salePrice').each(function() {
  var $table = $(this).parents('.profit');
  var cost = parseInt($table.find('.cost').val());
  var price = parseInt($( this ).val());
    if( price < cost ) {
       if(confirm("cost is larger than salePrice, are you sure?")){
          result = true;
          return false;
        } else {
          result = false;
          return false;
        }
    }
 });
 if (!result) {
    return false;
  }
  else {
    return true;
 }
 });

JsFiddle: https://jsfiddle.net/mspinks/xtch7hg8/5/

1
Matt Spinks 16 janv. 2017 à 04:48