我在标题部分定义了一个自定义函数,该函数可以检查,提醒用户并在特定限制失败时重置特定滑块的值。
在点击问题时,此功能可以很好地发挥作用:
this.questionclick = chkVals;
我还希望在用户退出文本输入字段时运行该功能(因为某些用户正在使用键盘进行调查)。我为每个滑块的文本输入字段实现了一个事件侦听器,当焦点不在文本输入字段中时,该事件监听器将运行该函数。
// choices is an array of choice ids
for (i = 0; i < choices.length; i++) {
var x = document.getElementById(choices[i]);
x.addEventListener("blur", chkVals, true);
};
我知道事件侦听器有效,因为弹出了正确的警报。由于this.setChoiceValue
不是环境中的功能,因此无法重置这些值。我尝试在函数中设置var that = this;
并调用that.setChoiceValue
,但仍然无法正常工作。
任何帮助将不胜感激!非常感谢。
答案 0 :(得分:1)
您还没有显示所有代码,所以我做一些假设。
this
是addOnload函数中的Qualtrics问题对象。由于chkVals在addOnload函数之外,因此this
(或that
)是未定义的。因此,您需要在函数调用(function chkVals(qobj)
中传递它,然后在chkVals函数中使用qobj.setChoiceValue
。然后您的函数调用将变为:
this.questionClick = chkVals(this);
和
x.addEventListener("blur", chkVals(this), true);
答案 1 :(得分:1)
@T。 Gibbons的回答帮助我达到了这一点。如建议的那样,我需要向<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/cardView_item_assesment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="4dp"
android:clickable="true"
android:focusable="true"
app:cardCornerRadius="4dp"
app:cardElevation="4dp"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textView_title"
android:layout_width="285dp"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginEnd="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_marginStart="5dp"
android:layout_marginTop="5dp"
android:ellipsize="end"
android:maxLines="1"
android:scrollHorizontally="true"
android:textColor="@color/colorPrimaryDark"
android:textSize="30sp"
tools:text="PlaceHolder" />
<TextView
android:id="@+id/textView_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:textColor="@color/colorPrimaryDark"
android:textSize="15sp"
android:layout_margin="5dp"
tools:text="2018/09/02" />
<TextView
android:id="@+id/textView_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView_date"
android:layout_alignParentEnd="true"
android:textColor="@color/colorPrimaryDark"
android:textSize="15sp"
android:layout_margin="5dp"
tools:text="09:00" />
<TextView
android:id="@+id/textView_total"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toEndOf="@id/editText_achieved"
android:layout_below="@+id/textView_title"
android:textColor="@color/colorPrimaryDark"
android:layout_alignBaseline="@id/editText_achieved"
android:textSize="20sp"
android:layout_margin="5dp"
tools:text="Total: 100" />
<android.support.v7.widget.AppCompatEditText
android:id="@+id/editText_achieved"
android:layout_width="130dp"
android:layout_height="wrap_content"
android:layout_below="@+id/textView_title"
android:maxLines="1"
android:textColor="@color/colorPrimaryDark"
android:textSize="20sp"
tools:text="Result: 50" />
<TextView
android:id="@+id/textView_contribution"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView_total"
android:textColor="@color/colorPrimaryDark"
android:textSize="20sp"
android:layout_margin="5dp"
tools:text="Weight: 25%"/>
<TextView
android:id="@+id/txtID"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="invisible" />
</RelativeLayout>
添加一个参数,以便能够引用chkVals()
对象。但是,
this
由于this.questionClick = chkVals(this);
是保留对象而无法工作,因此整个标题脚本将无法运行。我最终在我的自定义函数中将this
的所有引用更改为this
,并根据建议添加了参数that
:
that
要使用参数调用该函数,必须显式定义一个名为function chkVals(that) {
...
... that.setChoiceValue(x, y)
}
的匿名函数,否则它将不起作用(我不确定为什么):
chkVals
以上有效!