我有一个包含所有用户名的选择框。我想通过在选择框中选择(全部)选项列出一个地方的所有用户。我尝试过以下
查看
= select_tag :user_id, options_from_collection_for_select(User.all, "id", "name", @user.id),:prompt => "(All)", class: "no-padding user_select"
的js
$(".user_select").on("change", function() {
if ($(this).val() == "") {
window.location = '/users/absences/all';
$(this).attr('selected', true);
} else {
window.location = '/users/' + this.value + '/absences';
}
});
当我选择所有选项时,我被重定向到正确的页面但在选择框中我看不到(全部)选项突出显示。相反,我看到第一个选项将selected属性设置为true。
当我像其他任何选项一样点击它时,我希望在选择框中看到(全部)选项。任何人都可以帮助我这样做。
答案 0 :(得分:0)
两件事。
首先,您没有在代码中为选项设置属性。您的代码正在select上设置属性。您需要找到“全部”选项并将其设置为选中。
其次,正如已经指出的那样,选择此选项的JavaScript甚至不在右侧页面上运行。在我看来,每次去/users/absences/all
时,您都希望选择“全部”选项,因此您只需将selected
放在html选项中即可。不需要是JavaScript。
<select id="user_select">
<option value="all" selected>All</option>
<option value="1">Jon Doe</option>
</select>
但是,如果您因为某些奇怪的原因而想要使用JavaScript选择该选项,那么您可以在DOM准备就绪:
$(function() {
$('#user_select option[value=all]').prop('selected', true);
});
或者,如果您的“全部”选项中没有值,但该选项首先出现:
$(function() {
$('#user_select option:first').prop('selected', true);
});