Gregi: Variable in die untere Funktion übergeben jQuery

Hallo Community
Ich möchte die kommastelle Varialbe in die untere Funktion mitgeben, damit sie in die .toFixed() hinzugefüg wird. Wie kann ich das Lösen?

  
  
$('#w').on('change', function() {  
  if($(this).val() == "4") {  
	  	var kommastellen = 4;  
	}  
	  
if($(this).val() == "2") {  
	  	var kommastellen = 2;  
	}  
	  
if($(this).val() == "3") {  
	  	var kommastellen = 3;  
	}  
	  
});  
  
  
$('input').on('keyup', function() {  
	var zahl1 = $('#zahl1').val();  
	var zahl2 = $('#zahl2').val();  
	var result = Number(zahl1) + Number(zahl2);  
	$("#result").text(result.toFixed(kommastellen));  
});  
  

Danke und Grüsse
Gregi

  1. Ich möchte die Variable kommastelle in die untere Funktion mitgeben, damit sie in die .toFixed() hinzugefüg wird. Wie kann ich das Lösen?

    $('#w').on('change', function() {
      if($(this).val() == "4") {
       var kommastellen = 4;
    }

    $('input').on('keyup', function() {

    $("#result").text(result.toFixed(kommastellen));
    });

      
    Deine Herangehensweise scheint mir falsch. Wieso lagerst du bei Änderung von #w dessen Wert in einer separaten Variablen, wenn du diesen Wert genauso gut in input/keyup direkt abfragen kannst?  
      
      
    ~~~javascript
    $('input').on('keyup', function() {  
      var kommastellen = Number($('#w').val());  
      if ((kommastellen < 2) || (kommastellen > 4)) {  
         kommastellen = 2;  
      }  
      …  
      $("#result").text(result.toFixed(kommastellen));  
    }
    
    1. Super Danke für deine Hilfe.
      Jetzt habe ich noch eine Frage, kann ich
      $('input').on('keyup', function()
      und
      $('#w').on('change', function()
      gemeinsam auslösen.
      Das es automatisch aktualisiert bei einem wechsel der Selectbox (on change) und beim Tippen (on keyup)?

      So wechselt es nur wenn man danach auch wieder was eingibt in einem input Feld.

      Danke und Gruss
      Gregi

      1. Jetzt habe ich noch eine Frage, kann ich
        $('input').on('keyup', function()
        und
        $('#w').on('change', function()
        gemeinsam auslösen.

        So wechselt es nur wenn man danach auch wieder was eingibt in einem input Feld.

        Richtig, das habe ich übersehen. Verschiebe den ganzen Zahlformatiercode in eine eigene Funktion und klemme diese an die gewünschten Ereignisse:

        var meinsuperdynamischernachkommastellenformatiercode = function() {  
          var kommastellen = Number($('#w').val());  
          if (! ((kommastellen >= 2) && (kommastellen <= 4))) {  
             kommastellen = 2;  
          }$("#result").text(result.toFixed(kommastellen));  
        }  
        $('input').on('keyup', meinsuperdynamischernachkommastellenformatiercode);  
        $('#w').on('change', meinsuperdynamischernachkommastellenformatiercode);
        

        (Die Gültigkeitsabfrage für kommastellen habe ich etwas umgestellt für den Fall, dass #w gar keine Zahl zurückgibt.)

        1. Super vielen Dank ;-)

  2. Tach!

    Ich möchte die kommastelle Varialbe in die untere Funktion mitgeben, damit sie in die .toFixed() hinzugefüg wird. Wie kann ich das Lösen?

    Der Wert steht dir über $('#w').val() zur Verfügung.

    [code lang=javascript]

    $('#w').on('change', function() {
      if($(this).val() == "4") {
       var kommastellen = 4;
    }

    if($(this).val() == "2") {
       var kommastellen = 2;
    }

    if($(this).val() == "3") {
       var kommastellen = 3;
    }

    });

    Don't repeat yourself! Das var muss in einem Scope nur einmal geschrieben werden. Die anderen beiden var sind überflüssig. Wenn die Kommastellen nur im Bereich >=2 und <=4 sein dürfen, dann kann man das in einer Bedingung abfackeln. Zunächst $(this).val() in einer lokalen Variable ablegen, damit das nicht mehrfach ermittelt werden muss, dann den Vergleich mit && notieren, anschließend einmal den Wert zuweisen. Allerdings bleibt dann dann das Wie-bekommt-man-den-Wert-nach-unten-Problem. Besser ist, den Wert mit Math.min() und Math.max() einzufangen. $(this).val(Math.min(4, Math.max(2, $(this).val()))). Und noch besser ist, den Bereich gleich beim <input id="w" type="number" min="2" max="4"> anzugeben. (Und ein sprechenderer Bezeichner als nur "w" kommt auch immer gut.)

    dedlfix.

    1. @@dedlfix:

      nuqneH

      Und noch besser ist, den Bereich gleich beim <input id="w" type="number" min="2" max="4"> anzugeben.

      Nein, ich glaube nicht, dass "w" ein Eingabefeld sein sollte, wenn nur 2, 3 und 4 gültige Werte sind. Eine Auswahlbox oder eine Gruppe von 3 Radiobuttons scheint mir sinnvoller.

      (Und ein sprechenderer Bezeichner als nur "w" kommt auch immer gut.)

      Das zweifelsohne.

      Qapla'

      --
      „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)