您如何将相同的 javascript 代码应用于 Qualtrics 调查中的多个问题?
How do you apply the same javascript code to multiple questions in Qualtrics survey?
我的一个调查问题中有一些 javascript 更改了特定字段的格式。它工作得很好,但我想将相同的代码应用于其他几个问题。显然,我可以简单地复制并粘贴到每个问题上,但是有什么方法可以将代码设置在一个位置以便更易于维护?我查看了许多论坛,但未能找到解决方案。预先感谢您的帮助。
编辑:
这是我想针对多个问题重复的 JavaScript 代码:
{
/*Place your JavaScript here to run when the page is fully displayed*/
jQuery("#"+this.questionId+" select option:first-child").text("Select one");
jQuery("#"+ this.questionId + " option").each(function () {
if (jQuery(this).text().includes("\"\"")) {
jQuery(this).hide();
}else{
title = jQuery(this).text()
title = title.match(/".*"/)
if(title != null && title[0].length > 30){
newTitle = title[0].match(/^.{30}.*?\s/)[0]
if(newTitle != title){
newTitle = newTitle + "...\""
}
text = jQuery(this).text()
jQuery(this).text(text.replace(title[0],newTitle))
}
}
});
});
基本上,每个联系人都预加载了一些嵌入式数据,几个问题涉及一个下拉菜单,允许用户 select 他们的哪些数据元素与项目相关。此代码可确保下拉列表中不会包含空白或缺失的数据,而且如果选项的字符太多,则会被截断。多个问题包括相同的下拉选项,但在其他方面有所不同。
在你的每个问题中添加相同的class(我选择myQuestion
class)然后查询它。
遍历每个 select 和 find
option:first-child
然后 find
option
并遍历它们中的每一个。
$('.myQuestion select').each(function(selectIndex, select){
// loop through each select
// for each select find all the options
$(this).find("option:first-child").text("Select one");
$(this).find('option').each(function(optionIndex, option){
console.log(`select (${selectIndex}) | option (${optionIndex})`);
// your code here
});
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="myQuestion">
<select>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
</div>
<div class="myQuestion">
<select>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
</div>
使您的代码成为一个函数并将其放入 Qualtrics header。在适用的每个问题中调用函数。
在header中:
<script>
myFunction(qobj) {
jQuery("#"+qobj.questionId+" select option:first-child")...etc...
}
</script>
那么在你的问题中:
Qualtrics.SurveyEngine.addOnload(function() {
myFunction(this);
});
我的一个调查问题中有一些 javascript 更改了特定字段的格式。它工作得很好,但我想将相同的代码应用于其他几个问题。显然,我可以简单地复制并粘贴到每个问题上,但是有什么方法可以将代码设置在一个位置以便更易于维护?我查看了许多论坛,但未能找到解决方案。预先感谢您的帮助。
编辑: 这是我想针对多个问题重复的 JavaScript 代码:
{
/*Place your JavaScript here to run when the page is fully displayed*/
jQuery("#"+this.questionId+" select option:first-child").text("Select one");
jQuery("#"+ this.questionId + " option").each(function () {
if (jQuery(this).text().includes("\"\"")) {
jQuery(this).hide();
}else{
title = jQuery(this).text()
title = title.match(/".*"/)
if(title != null && title[0].length > 30){
newTitle = title[0].match(/^.{30}.*?\s/)[0]
if(newTitle != title){
newTitle = newTitle + "...\""
}
text = jQuery(this).text()
jQuery(this).text(text.replace(title[0],newTitle))
}
}
});
});
基本上,每个联系人都预加载了一些嵌入式数据,几个问题涉及一个下拉菜单,允许用户 select 他们的哪些数据元素与项目相关。此代码可确保下拉列表中不会包含空白或缺失的数据,而且如果选项的字符太多,则会被截断。多个问题包括相同的下拉选项,但在其他方面有所不同。
在你的每个问题中添加相同的class(我选择myQuestion
class)然后查询它。
遍历每个 select 和 find
option:first-child
然后 find
option
并遍历它们中的每一个。
$('.myQuestion select').each(function(selectIndex, select){
// loop through each select
// for each select find all the options
$(this).find("option:first-child").text("Select one");
$(this).find('option').each(function(optionIndex, option){
console.log(`select (${selectIndex}) | option (${optionIndex})`);
// your code here
});
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="myQuestion">
<select>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
</div>
<div class="myQuestion">
<select>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="mercedes">Mercedes</option>
<option value="audi">Audi</option>
</select>
</div>
使您的代码成为一个函数并将其放入 Qualtrics header。在适用的每个问题中调用函数。
在header中:
<script>
myFunction(qobj) {
jQuery("#"+qobj.questionId+" select option:first-child")...etc...
}
</script>
那么在你的问题中:
Qualtrics.SurveyEngine.addOnload(function() {
myFunction(this);
});