Ausgabe
Ich habe Funktionalität, wenn Sie das Kontrollkästchen “Gleiche Höhe und Breite” aktiviert haben, um Werte von Höhe zu Breite und umgekehrt zu var constrainsProportions
bewältigen , wenn Sie einen Wert übergeben. Dies wird in bzw. aufgerufen . Und es funktioniert .
Auch wenn Sie das Kontrollkästchen aktivieren, werden die höchsten Werte verwendet und an den zweiten weitergegeben.
Dies wird in Bedingung aufgerufen Und es funktioniert auch .
Ein Fehler tritt auf, wenn Sie beim Übergeben von Werten (Sie drücken nicht die Eingabe- oder Bearbeitungstaste) auf das Kontrollkästchen klicken. Es nimmt wieder den höchsten Wert und gibt ihn an den zweiten weiter.
Es sollte nicht funktionieren . Kein Wert sollte geändert werden.
Auch wenn Sie das Kontrollkästchen zum zweiten Mal drücken. UndgrpHeight.numb
grpWidth.numb
grpWidth.numb.onChange = function()
grpHeight.numb.onChange = function()
if (constrainsProportions.value == true)
edittext
constrainsProportions.value
false
grpWidth.numb.onChange()
sonst grpHeight.numb.onChange
in dieser Bedingung sollte nicht aufgerufen werden.
Nicht sicher, wo der Fehler ist.
Code
#target photoshop
var mainWindow = new Window("dialog", "dynamic changing values");
var grpUnitVal = mainWindow.add("group")
var constrainsProportions = grpUnitVal.add("checkbox", undefined, "Same Height and Width");
//Edittext: Height
var grpHeight = mainWindow.add("group")
grpHeight.text = grpHeight.add("statictext", undefined, "Height: ");
grpHeight.numb = grpHeight.add("edittext", undefined, 0);
grpHeight.numb.characters = 9;
//Edittext: Width
var grpWidth = mainWindow.add("group")
grpWidth.text = grpWidth.add("statictext", undefined, "Width: ");
grpWidth.numb = grpWidth.add("edittext", undefined, 0);
grpWidth.numb.characters = 9;
//Edittext: Width; if "constrains proportion" is checked, Heigth and Width values are changed in the same time
grpWidth.numb.onChange = function() {
if (constrainsProportions.value == true){
grpHeight.numb.text = grpWidth.numb.text;}
}
//Edittext: Height; if "constrains proportion" is checked, Heigth and Width values are changed in the same time
grpHeight.numb.onChange = function() {
if (constrainsProportions.value == true){
grpWidth.numb.text = grpHeight.numb.text;}
}
constrainsProportions.onClick = function() {
//Set the same heighest value in Height and Width
alert(constrainsProportions.value);
if (constrainsProportions.value == true){
if (parseInt(grpWidth.numb.text, 10) > parseInt(grpHeight.numb.text, 10)) {
grpWidth.numb.onChange();}
else {
grpHeight.numb.onChange();}
}
}
mainWindow.show();
Danke im Voraus.
Lösung
Dies geschieht, weil das onChange()
Ereignis gesendet wird, wenn das Steuerelement den Fokus verliert, nicht wenn Sie etwas eingeben, sodass der Code eine frühere Version dessen erhält, was Sie auf dem Bedienfeld sehen. Verwenden Sie onChanging
stattdessen:
#target photoshop
var mainWindow = new Window("dialog", "dynamic changing values");
var grpUnitVal = mainWindow.add("group")
var constrainsProportions = grpUnitVal.add("checkbox", undefined, "Same Height and Width");
//Edittext: Height
var grpHeight = mainWindow.add("group")
grpHeight.text = grpHeight.add("statictext", undefined, "Height: ");
grpHeight.numb = grpHeight.add("edittext", undefined, 0);
grpHeight.numb.characters = 9;
//Edittext: Width
var grpWidth = mainWindow.add("group")
grpWidth.text = grpWidth.add("statictext", undefined, "Width: ");
grpWidth.numb = grpWidth.add("edittext", undefined, 0);
grpWidth.numb.characters = 9;
//Edittext: Width; if "constrains proportion" is checked, Heigth and Width values are changed in the same time
grpWidth.numb.onChanging = function() {
if (constrainsProportions.value){
grpHeight.numb.text = this.text;}
}
//Edittext: Height; if "constrains proportion" is checked, Heigth and Width values are changed in the same time
grpHeight.numb.onChanging = function() {
if (constrainsProportions.value){
grpWidth.numb.text = this.text;}
}
constrainsProportions.onClick = function() {
//Set the same heighest value in Height and Width
// alert(constrainsProportions.value);
if (this.value){
if (parseInt(grpWidth.numb.text, 10) > parseInt(grpHeight.numb.text, 10)) {
grpHeight.numb.text = grpWidth.numb.text;}
else {
grpWidth.numb.text = grpHeight.numb.text;}
}
}
mainWindow.show();
Beantwortet von – Sergey Kritskiy
Antwort geprüft von – Marilyn (FixError Volunteer)