当选择列表中只有一个选项时,jQuery change()函数不起作用

时间:2018-11-14 12:31:42

标签: jquery

我正在尝试使用jquery从动态填充的选择列表中获取数据。当列表中有很多选项时,jquery change()函数效果很好,但是只有一个选项时,它不会触发。我的代码在下面

<?php
    $res=$db->SelectData("amgusers");

    if (mysqli_num_rows($res) > 0) {    
        while($row = mysqli_fetch_array($res))
        {
            echo'<option value="'.$row['u_id'].'">'.$row['u_username'].'</option>';
        }
    }                           
?>

<script>    
    $("#uname").change(function()
    {
        alert($("#uname option:selected").text());
    });
</script>

2 个答案:

答案 0 :(得分:1)

如果下拉列表中只有一项,它将无法正常工作。

您可以改为尝试onClick()

否则,在选择框的顶部选择--select--作为选项。因此,请在您的JavaScript中忽略它。

答案 1 :(得分:0)

您有一些选择。添加更多事件或设置默认事件并触发它。或结合起来。您还可以将默认设置设置为标记中的第一个(选中),或者如果设置为默认,则仅强制使用。

两个事件(如果您只有一个事件,或者不更改它,似乎就不太好了

$("#uname").on('change click', function() {
  if ($(this).find('option').length === 1 && !$(this).find('option:selected').length) {
    $(this).find('option').prop("selected", true);
  }
  alert($(this).find("option:selected").text() + " : " + $(this).val());
}).trigger('change');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<select id="uname">
  <option value="me">My Option</option>
</select>

也许更好,我发现多个事件可能不太好,因为您只希望对更改进行更改,所以我选择这样做。 (“点击”似乎在这里不合适)

$("#uname").on('change', function() {
  if ($(this).find('option').length === 1 && !$(this).find('option:selected').length) {
    $(this).find('option').prop("selected", true);
  }
  alert($(this).find("option:selected").text() + " : " + $(this).val());
}).trigger('change');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<select id="uname">
  <option value="me">My Option</option>
</select>

请注意,当您拥有“空”的第一个选项值时,第二组代码也可以使用,但是您可能还需要使第一个选项不可选择,否则在选择该条件时会处理该条件。