# suche Hilfe bei Anpassung eines Scripts



## lacov (23. Feb 2018)

Ich bin Musiklehrer und habe für meine kleine Schule ein Songbook (Übungsplattform...) geschrieben.
Dort gibt es die Möglichkeit mittels Buttons den Song (Text + AKKORDE) in jede Tonart zu transponieren. Dieses Javascript habe ich von Christian Frauscher. Man kann aus den mittlerweise über 500 Songs sein persönliches Songbook zusammen bauen. Nun möchte ich, dass der Schüler den Transposewert zu dem Song abspeichern kann (soweit geht schon alles) und beim Aufruf des Songs der Wert den Akkorde automatisch transponiert.
Der Transposewert wird in einer URL Variablen an den Song gehängt. Kann aber auch in eine : <input type="hidden"> geschrieben werden.
Leider bekomme ich das nicht hin und benötige Hilfe!

Da das Songbook nicht ohne Passwort geht... DEMOSeite:[/B] http://sample.webotto.de/Songbook_demo.php 
hier das Script:
// JavaScript Document
$().ready(function() {
  var octave = [
    "A",
    "B",
    "H",
    "C",
    "C#",
    "D",
    "Eb",
    "E",
    "F",
    "F#",
    "G",
    "G#"
];
  // START Button und Input erstellen:  
  // hier werden die Buttons hinzugefügt.
  var $btnGroup = $("#MyNavi .btn-group");
  var $btnDown = $("<button>").addClass("btn btn-lg");
  $btnDown.html('<i class="fa fa-chevron-down"></i>');
  $btnDown.appendTo ($btnGroup);

  var $transpose = $("<input>").addClass("btn btn-lg");
  $transpose.val("0").width("3em");        
  $transpose.appendTo ($btnGroup);

  var $btnUp = $("<button>").addClass("btn btn-lg");
  $btnUp.html('<i class="fa fa-chevron-up"></i>');
  $btnUp.appendTo($btnGroup);
  // ENDE Buttons & Input erstellen.

  // WENN Buttons & Input im HTML vorhanden reichen stattdessen auch diese drei Zeilen:
  //var $transpose = $(".input-transpose");
  //var $btnDown = $(".button-transpose-down");
  //var $btnUp = $(".button-transpose-up"); 


  // Event-Handler:
  $btnUp.click(function(e) {
    $transpose.val(parseInt($transpose.val())+1)
      .change();
    e.preventDefault();
    return false;
  });
  $btnDown.click(function(e) {
    $transpose.val(parseInt($transpose.val())-1)
      .change();
    e.preventDefault();
    return false;
  });

    $transpose.bind("change keyup", function () {
    if (this.value > 6) this.value = parseInt(this.value) - 12;
    if (this.value < -6) this.value = parseInt(this.value) + 12;
    var value = parseInt(this.value);

    if (!Number.isNaN(value)) {
      updateChords(value); 
    } else {
      this.value = "0";
    }
    });

  // helper functions
  function updateChords(trans) {
    var $accords = $(".Akkord");
    $accords.each(function() {
      var $this = $(this);
      var value = $this.text();

      if ($this.data("original")) {
        value = $this.data("original");
      } else {
        $this.data("original", value);
      }
      if (trans != 0)  {


      value = value.replace(/[\s\/]([abcdefgh])/g,normalizeMol).replace(/(A|B|C|D|E|F|G|H)(*|[#])?/g,function(chord,tone,mod) {
                var newChord = transpose(chord,trans);
                return newChord;
            });
          $this.html(value);

        } else {
          $this.html($this.data("original"));
        }

    })
  }
function normalizeMol(match) {
    return match.toUpperCase() + "m";
}
function transpose(chord,transpose) {
    var mod;
    if (chord.length > 1) {
        mod = chord.substr(1,1);
        chord = chord.substr(0,1);
    }
    var chordNr = parseInt(octave.indexOf(chord));
    if (chordNr>=0) {
        chordNr += parseInt(transpose);
        if (mod=="#") chordNr+=1;
        if (mod=="b" && chord !== "B") chordNr-=1;

    if (mod == "b" && chord == "B") chordNr = 1 + transpose;

        if (chordNr < 0) chordNr = chordNr+12;
        if (chordNr >= 12) chordNr = chordNr%12;

        return octave[chordNr] + (chordNr==1?"b":"");
    }
    return false;
}
});*


----------



## krgewb (23. Feb 2018)

In Monospace-Schrift:


```
$().ready(function() {
var octave = [
"A",
"B",
"H",
"C",
"C#",
"D",
"Eb",
"E",
"F",
"F#",
"G",
"G#"
];
// START Button und Input erstellen:
// hier werden die Buttons hinzugefügt.
var $btnGroup = $("#MyNavi .btn-group");
var $btnDown = $("<button>").addClass("btn btn-lg");
$btnDown.html('<i class="fa fa-chevron-down"></i>');
$btnDown.appendTo ($btnGroup);

var $transpose = $("<input>").addClass("btn btn-lg");
$transpose.val("0").width("3em");
$transpose.appendTo ($btnGroup);

var $btnUp = $("<button>").addClass("btn btn-lg");
$btnUp.html('<i class="fa fa-chevron-up"></i>');
$btnUp.appendTo($btnGroup);
// ENDE Buttons & Input erstellen.

// WENN Buttons & Input im HTML vorhanden reichen stattdessen auch diese drei Zeilen:
//var $transpose = $(".input-transpose");
//var $btnDown = $(".button-transpose-down");
//var $btnUp = $(".button-transpose-up");


// Event-Handler:
$btnUp.click(function(e) {
$transpose.val(parseInt($transpose.val())+1)
.change();
e.preventDefault();
return false;
});
$btnDown.click(function(e) {
$transpose.val(parseInt($transpose.val())-1)
.change();
e.preventDefault();
return false;
});

$transpose.bind("change keyup", function () {
if (this.value > 6) this.value = parseInt(this.value) - 12;
if (this.value < -6) this.value = parseInt(this.value) + 12;
var value = parseInt(this.value);

if (!Number.isNaN(value)) {
updateChords(value);
} else {
this.value = "0";
}
});

// helper functions
function updateChords(trans) {
var $accords = $(".Akkord");
$accords.each(function() {
var $this = $(this);
var value = $this.text();

if ($this.data("original")) {
value = $this.data("original");
} else {
$this.data("original", value);
}
if (trans != 0) {


value = value.replace(/[\s\/]([abcdefgh])/g,normalizeMol).replace(/(A|B|C|D|E|F|G|H)(|[#])?/g,function(chord,tone,mod) {
var newChord = transpose(chord,trans);
return newChord;
});
$this.html(value);

} else {
$this.html($this.data("original"));
}

})
}
function normalizeMol(match) {
return match.toUpperCase() + "m";
}
function transpose(chord,transpose) {
var mod;
if (chord.length > 1) {
mod = chord.substr(1,1);
chord = chord.substr(0,1);
}
var chordNr = parseInt(octave.indexOf(chord));
if (chordNr>=0) {
chordNr += parseInt(transpose);
if (mod=="#") chordNr+=1;
if (mod=="b" && chord !== "B") chordNr-=1;

if (mod == "b" && chord == "B") chordNr = 1 + transpose;

if (chordNr < 0) chordNr = chordNr+12;
if (chordNr >= 12) chordNr = chordNr%12;

return octave[chordNr] + (chordNr==1?"b":"");
}
return false;
}
});
```


----------



## Barista (2. Mrz 2018)

Bei Deinem Problem handelt es sich um JavaScript.

Deshalb hast Du sicher Deine Frage im falschen Forum gestellt.

Außerdem ist Deine Frage sehr unspezifisch.


----------



## Thallius (2. Mrz 2018)

Barista hat gesagt.:


> Bei Deinem Problem handelt es sich um JavaScript.
> 
> Deshalb hast Du sicher Deine Frage im falschen Forum gestellt.
> 
> Außerdem ist Deine Frage sehr unspezifisch.



Na dann schau mal wie dieses Forum heißt....


----------



## Barista (2. Mrz 2018)

Seltsam, ich habe diesen Thread im Forum JavaEE gefunden.


----------



## Flown (2. Mrz 2018)

Ist auch von mir verschoben worden.


----------

