我的一个调查问题中包含一些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))
}
}
});
});
基本上,每个联系人都会预先加载一些嵌入式数据,并且几个问题涉及一个下拉菜单,该菜单使用户可以选择自己的哪些数据元素与项目相关。此代码确保下拉列表中不包含空白或丢失的数据,并且如果该选项的字符数过多,则该字符将被截断。多个问题包括相同的下拉选项,但在其他方面有所不同。
答案 0 :(得分:1)
将相同的类添加到每个问题中(我选择了myQuestion
类),然后对其进行查询。
依次遍历每个选择,然后依次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>
答案 1 :(得分:1)
使您的代码具有功能并将其放在Qualtrics标头中。从适用的每个问题中调用该函数。
在标题中:
<script>
myFunction(qobj) {
jQuery("#"+qobj.questionId+" select option:first-child")...etc...
}
</script>
然后在您的问题中:
Qualtrics.SurveyEngine.addOnload(function() {
myFunction(this);
});