2017-08-28 1 views
0

En utilisant une fonction Validate pour traiter une sélection ComboBox, je peux obtenir la valeur de l'élément sélectionné mais l'index de l'item est toujours l'index de la sélection précédente:Acrobat Pro DC ComboBox - La sélection actuelle ne correspond pas à son index

var combo = this.getField("combo"); 
var options = [ 
    [ "Option a" , 4 ], 
    [ "Option b" , 8 ], 
    [ "Option c" , 15 ], 
    [ "Option d" , 16 ], 
    [ "Option e" , 23 ], 
    [ "Option f" , 42 ] 
] 

combo.setItems(options) 

combo.setAction("Validate", "someFunc(event)") 

function someFunc(e){ 
    console.println(e.value)     // Option c 
    console.println(combo.currentValueIndices) // 0 
} 

je prévois que le résultat soit:

// option c 
// 2 

Qu'est-ce qui se passe ici?

Répondre

0

Sortez votre code de la fonction et placez-le dans un script KeyStroke personnalisé, puis utilisez e.changeEx au lieu de e.value.

enter image description here

+0

Merci Joel, je suis sûr que cela fonctionnerait, mais j'aimerais avoir tout mon code dans un fichier sans utiliser la fenêtre des propriétés si possible. – gatzkerob

0

Dans ce cas, utilisez le lien de quelque chose ... ce

combo.setAction("Keystroke", "console.println(event.changeEx);console.println(this.getField('combo').currentValueIndices")) 
+0

'currentValueIndices' montre toujours l'index de l'élément précédemment sélectionné dans la liste déroulante – gatzkerob

0

Problème résolu. J'ai changé:

combo.setAction("Validate", "someFunc(event)") 

à:

combo.setAction("Format", "someFunc(event)") 

Et je reçois maintenant currentValueIndices correcte.

+0

C'est parce que le script de format est le dernier à s'exécuter, il se produit après que la valeur du champ a été mise à jour. Pendant l'événement validate, la valeur n'a pas encore changé. Cela ne change que si la validation est bonne (vrai). Dans l'événement de frappe, la propriété changeEx est la nouvelle valeur. Les currentValueIndicies n'ont pas encore changé. – joelgeraci