Hallo,
also zunächst: Kreativ bist Du.
Da fügst Du ein ziemlich richtiges script ein, und dann folgt am Ende ein ziemliches Codegewirr.
Code:
<link href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" rel="stylesheet" />
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-csv/1.0.11/jquery.csv.min.js"></script>
<script type="text/javascript" charset="utf-8">
$(document).on('ready pjax:complete',function() {
var url = "/upload/surveys/{251594}/files/Laender_deutsch.csv";
var country = new Array();
$.get(url,function(data){
fullArray = $.csv.toArrays(data);
$(fullArray).each(function(i, item){
country.push(item[0]);
});
$("#question{15243} input[type=text]:eq(0)").autocomplete({
minLength: 2,
source: country
});
});
});
</script>
Hier wäre das script eigentlich zu Ende. Aber jetzt kommt irgendwelcher Code, der aber nicht von <script>...</script> tags umschlossen ist.
$(document).on('click',':checkbox[data-checkboxfor]',function(){ if($(this).is(":checked")){ $(":checkbox[data-checkboxfor][name='"+$(this).attr("name")+"']").not(this).prop('checked',false); $("#"+$(this).attr("data-checkboxfor")).val($(this).data('updatevalue')).trigger("keyup").prop("disabled",true); }else{ $("#"+$(this).attr("data-checkboxfor")).val("").trigger("keyup").prop("disabled",false); } $("#"+$(this).attr("data-checkboxfor")+"_datetimepicker.date-timepicker-group").trigger("dp.change"); }); $(function() { $(":checkbox[data-checkboxfor]:checked").each(function(){ $("#"+$(this).attr("data-checkboxfor")).prop("disabled",true); }); });
Ich weiß zwar, was es ist, aber nicht, was dies hier soll.
Es ist der js-code der "checkBoxForText.js".
Aber dies ist doch ein Plugin. Ein Plugin kann man im Plugin-Manager direkt hochladen und installieren.
Oder man entzippt es und fügt dies in den "plugins"-Ordner der LimeSurvey-Installation ein
Dann muss es im Plugin-Manager aktiviert werden. (Manchmal muss man auch noch vorher "Dateien scannen")
Und in den Settings gibt es einen neuen Menuepunkt
Das dazu.
Die zweite kreative Leistung war dies
var url = "/upload/surveys/{251594}/files/Laender_deutsch.csv";
und dies
$("#question{15243} input[type=text]:eq(0)").autocomplete({
Also, entweder man schreibt den Wert "hart" hinein, oder man benutzt die ExpressionScript-Variablen wie
{SID} : SurveyID
{QID}: QuestionID
{SAVEDID}: ID der gegebenen Antwort in der Antworttabelle
{LANG}: Sprache
{TOKEN:ATTRIBUTE_1}: Wert des ersten zusätzlichen Attributs in der Teilnehmer-Tabelle
{EXPIRY}: End-Datum der Umfrage
oder was es sonst noch gibt.
Der Sinn liegt doch gerade darin, dass diese Variable immer durch den aktuellen Wert ersetzt wird.
Also bitte
var url = "/upload/surveys/{SID}/files/Laender_deutsch.csv";
und
$("#question{QID} input[type=text]:eq(0)").autocomplete({
Nicht "doppel moppeln" mit geschweiften Klammern und dann doch nichts, womit ExpressionScript etwas anfangen könnte.
So, genug gemosert.
Wenn wir dies alles korrigieren, ist es völlig in Ordnung.
Naja, fast.
Denn es passiert mit Deiner Datei dies:
Woran liegt es?
Falsche Zeichencodierung.
Wie Du im script siehst, soll die Codierung "utf-8" sein. Deine Datei ist aber ANSI codiert.
Einfach in einem Text-Editor (z.B. Notepad++) ändern.
So, jetzt ist es endlich in Ordnung.
Kommen wir zur Zweisprachigkeit.
Das ist ja ganz einfach.
Du musst den Fragetext doch übersetzen. Und das script steht im Fragetext; es muss also auch "übersetzt" werden.
Daher ist die Übersetzung von "
Laender_deutsch.csv" eben "
Laender_english.csv". Mehr nicht.
Nächster Punkt: Numerische Codes
Im Grunde sind sie ja unnötig, da es sich hier ja ganz klar um eine nominale Variable handelt. Du kannst also nur Häufigkeiten rechnen. Und SPSS oder ein anderes Auswerte-Tool kann ja mit alphanumerischen Codes umgehen.
Man könnte sich allerdings vorstellen, "sprechende" Codes zu bilden. Soll heißen, im Code steckt zusätzlich der Kontinent, und die Region. Dies ließe im Auswerte-Tool dann schnell Gruppenbildungen auf diesen Ebenen zu.
Beispiel:
1. Kontinente: 1: Afrika, 2: Amerika, 3: Asien, 4: Australien&Ozeanien, 5:Europa
2. Regionen: 1:Nordafrika, 2: Westafrika, 3: Zentralafrika, 4: Ostafrika, 5:Südafrika
3. Länder: Am besten zweistellig.
Dann könnte der Senegal einen Code haben wie 1206 (Afrika,Westafrika, und die Ländernumer (als Ländernummer könnte man dann auch den zwei- oder dreistelligen ISO-Code benutzen)
Bewerkstelligen lässt sich dies auch ziemlich leicht mittels einer Frage vom Typ "langer Text", in welche als Vorgabe-Antwort alle Ländernamen in beiden Sprachen eingetragen werden mit eben diesem angehängten Code. Die Ländernamen werden alle durch angehängte Leerzeichen auf dieselbe Länge gebracht (z.B. 30 Zeichen) - ist in Excel schnell zu machen mit einer Formel - und der Code angehängt.
Mit einer Frage vom Typ "Gleichung" sucht man dann den Code mit einer Formel wie
{substr(strpos(QPool,Q1)+30,4)} - ganz ins Grobe gesprochen.
Aber es ist ja leicht zu sehen.
Mit "strpos" wird die Anfangsposition des Namens gesucht und 30 Stellen weiter wird mit "substr" ein 4 Zeichen langer Text herausgeschnitten.
Geht also.
Andere Möglichkeit - damit komme ich auf Dein ursprüngliches Drop-Down zurück.
Nivcht mit einer Frage vom Typ "Liste(Klappbox)", sondern auch mit einer Frage vom Typ "kurzer Text", wie im Tutorial, Kapitel 3.1. gezeigt
Hier wären auch Übertexte möglich wie
Da hierbei die Ländernamen im Fragetext stehen, gibt es kein Problem mit "max_input_vars".
Und jetzt komme ich einmal zu Deiner Länderliste.
Was willst Du eigentlich fragen?
In der Liste sind ja viele Gebiete, die zu anderen Staaten gehören. Wenn Du also daran interessiert bist, aus welchem Teil der Welt jemand kommt, ist die gesonderte Behandlung der französischen Departements "Martinique" und "Guadeloupe" in Ordnung.
Dann ist aber nicht ersichtlich, warum zwar Aruba vorhanden ist., Curacao und Bonaire, Saba, St. Eustatius, St.Maarten aber fehlen. Diese gehören doch alle zum "Königreich der Niederlande", zu welchem gehören:
1. Die Niederlande mit Bonaire, Saba, St. Eustatius
2. Aruba
3. Curacao
4. St. Maarten
Da ist es also schon unplausibel.
Denn der Teilnehmer hat ja nur die Chance "Königreich der Niederlande" einzugeben. Dann weißt Du auch nicht, woher er genau kommt.
Dann kommen die umstrittenen Gebiete (z.b. Westsahara, Transnistrien, ...)
Und einige Länder fehlen ganz einfach (Kosovo, Südsudan, )
Etwas anders, das mich stört, ist, dass einige Ländernamen nicht Deutsch, sondern in der Landessprache auftauchen (Cabo Verde, Cote d'Ivoire, Eswatini,...)
Dann tauchen Länder mehrmals auf. (Ost-Timor, und besonders interessant "Großbritannien", aber auch das "Vereinigte Königreich")
Langer Rede kurzer Sinn: Überarbeite die Liste sorgfältig
Diese hier finde ich nicht so schlecht. Es sind gleich beide Namen drin (deutsch - englisch)
[url]
www.nationsonline.org/oneworld/countrynames_german.htm
[/url]
Wie schon gesagt "Was ist die Frage"
Staatsangehörigkeit oder Herkunftsregion?
Der erste Fall ist klar; die 197 Staaten sind ja fest.
Beim zweiten kommst Du "in Teufels Küche", da dann ja jede Fitzel-Insel aufgeführt werden müsste
Und dafür würde ich dem Teilnehmer einfach eine Karte auf dem Bildschirm präsentieren, wo er dann den Marker entsprechend setzt.
So, jetzt habe ich viel geschrieben.
Dafür gibt es auch eine Datei.
Viel Erfolg
Joffm
P.S.
Es gibt - glaube ich - auch eine andere Implementierung des autocompletes, wo eine Wert angezeigt, ein anderer aber gespeichert wird.
Das würde dann die numerischen Codes betreffen.
Aber frag mich nicht weiter dazu. Ich werde sehen.