Ich habe vier Entitätsreferenzfelder für die Benutzerentität in einem Formular. Das Host-Formular ist ein Knotenbearbeitungsformular. Drei davon sind Auswahllisten, zuletzt das Inline-Entitätsformular .
Nach dem Hinzufügen einer Benutzerentität über IEF versuche ich, die Werte der Auswahllisten zu aktualisieren:
function ebep_users_feature_users_list_ajax($form, $form_state) {
$ief = array_shift($form_state['inline_entity_form']);
$options = array('_node' => t('- None -'));
$commands = array();
foreach($ief['entities'] as $data) {
$options[$data['entity']->uid] = $data['entity']->name;
}
foreach(_ebep_users_feature_getUserListFieldNames() as $fieldName) {
$form[$fieldName]['und']['#options'] = $options;
$commands[] = ajax_command_replace('#'.$fieldName.'_wrapper', drupal_render($form[$fieldName]));
}
return array('#type' => 'ajax', '#commands' => $commands);
}
Es funktioniert, aber wenn ich versuche, einen anderen Benutzer über IEF hinzuzufügen, erhalte ich:
Eine illegale Auswahl wurde festgestellt. Bitte wenden Sie sich an den Site-Administrator.
Related
hier rechts aufgeführten Fragen gelöst?Antworten:
--- Ursprüngliche Antwort. Ist falsch, überprüfen Sie das Update unten.
Einfach einstellen
Auf der Auswahl, die mit AJAX aktualisiert wird.
Kasse "Unzulässige Auswahl wurde erkannt"
--- Update 17. Dezember 2019 ---
Eigentlich war das kein guter Rat, das ist lange her, jetzt weiß ich es besser.
Die Ajax-Rückruffunktion soll nur das geänderte Formular oder einige Ajax-Befehle zurückgeben.
In diesem Fall muss eine Formularänderung an der Formularfunktion oder einem Formularänderungshaken vorgenommen werden. Formularerstellungs- und Validierungsfunktionen werden jedes Mal ausgeführt, wenn ein Ajax-Rückruf aufgerufen wird. Überprüfen Sie einfach $ form_state in Ihrer Formularerstellungs- oder Änderungsfunktion und passen Sie die Werte entsprechend an.
Siehe Beheben des Fehlers "Eine unzulässige Auswahl wurde erkannt ..."
quelle
Ich bin in Drupal 6 mehrmals auf dieses Problem gestoßen und habe die Werte der Auswahlliste über Ajax geändert.
Folgendes können Sie tun:
array_merge
Wenn die erste Lösung für Sie funktioniert, sparen Sie viel Zeit beim Codieren und Testen. ABER wenn die Liste in der Dropdown-Liste dynamisch ist und Sie keine Kontrolle darüber haben, müssen Sie möglicherweise eine zweite Lösung wählen.
Schreiben Sie, wenn Sie auf Probleme stoßen. Ich habe für mein Projekt ziemlich viel an diesem Problem gearbeitet, und ich habe für ~ 50 Formulare gearbeitet, PHEW !!! :) :)
quelle
Ich habe den besten Weg gefunden, dies zu umgehen,
#value
indem ich das auf die Auswahlliste setze .Wenn wir den Wert in formstate haben und er in unseren Optionen ist, erhalten wir keinen Fehler. Wenn unser Wert nicht in den Optionen enthalten ist, wählen Sie die erste Option in unseren Optionen aus und verwenden Sie diese.
quelle
Meine Lösung:
quelle
Fügen Sie in Ihrem Ajax-Rückruf Folgendes hinzu:
Aus Sicherheitsgründen
_form_validate()
prüft die Kernfunktion , ob sich der Schlüssel #options eines Elements von dem geändert hat, was im ursprünglichen Build festgelegt wurde (was sie haben). Durch den Aufrufdrupal_get_messages()
undform_get_errors()
wir Drupal im Grunde sagen alle Fehler / Nachrichten zu ignorieren , während unsere Ajax - Anforderung ausgeführt wird . :) :)quelle