如何在jquery中为没有值的选项设置属性选择为true

时间:2014-01-29 05:28:37

标签: javascript jquery ruby-on-rails

我有一个包含所有用户名的选择框。我想通过在选择框中选择(全部)选项列出一个地方的所有用户。我尝试过以下

查看

= 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。

当我像其他任何选项一样点击它时,我希望在选择框中看到(全部)选项。任何人都可以帮助我这样做。

1 个答案:

答案 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);
});