使用JavaScript修改下拉列表中的选择值

6tqwzwtp  于 2022-12-21  发布在  Java
关注(0)|答案(4)|浏览(317)

我在React中创建了两个包含相同选项值的选择菜单。当用户从第一个列表(或第二个列表)中选择选项1时,该选项应该从第二个菜单中删除/隐藏,这样用户就没有机会选择重复的选项。这些选项被Map为一个对象数组。由于我还是编程新手,我不确定解决这个问题的最佳方法。
我尝试应用一个filter方法来更新列表选项。我希望它列出所有选项值!==到第一个选择的选项,但是得到了一个typeError,并且无法越过它。
我发现这个链接在这里是一样的,我正在尝试做的,但代码是相当旧的,因为我仍然是新的编程,我不知道如何重构它:
https://stackoverflow.com/questions/26137309/remove-selected-option-from-another-select-box
非常感谢任何建议/帮助。

qjp7pelc

qjp7pelc1#

selectedOptions.forEach((selection) => {
   const filteredOptions = options.filter((option) => option.id !== selection.id)
   setOptions(filteredOptions);
}

选项:用于选择的全局选项状态/对象。
如果你可以提供一个代码片段,我可以帮助你进一步,但首先要尝试实现这一点。

dldeef67

dldeef672#

// useState passed in as props 
const { team1, setTeam1, team2, setTeam2 } = props;

  const handleTeam1Change = async (team) => {
    await setTeam1(team);
  };

  const handleTeam2Change = async (team) => {
    await setTeam2(team);
  };

  return (
    <>
      <div className="team-filter">
        <h3 className="team-filter-heading">Team 1</h3>
        <Select
          defaultValue={team1}
          name="team"
          options={teams.filter((x) => x.value !== team2.value)}
          onChange={handleTeam1Change}
        />
      </div>
      <div className="team-filter">
        <h3 className="team-filter-heading">Team 2</h3>
        <Select
          defaultValue={team2}
          name="team"
          options={teams.filter((x) => x.value !== team1.value)}
          onChange={handleTeam2Change}
        />
      </div>
    </>
  );
};

const teams = [
  {
    value: "Team1",
    label: "Team1",
  },
  {
    value: "Team2",
    label: "Team2",
  },
{
    value: "Team3",
    label: "Team3",
  },
{
    value: "Team4",
    label: "Team4",
  },
]
vfwfrxfs

vfwfrxfs3#

如果你得到一个类型错误,最好共享错误和代码片段。但是如果有两个选择选项,在开始时显示相同的选项,但是当一个被选中时,选项会从第二个列表中动态删除。为此,我建议保持两个下拉列表的状态。比如list1和list2。当你从任何一个下拉列表中选择了输入时,应该调用一个点击处理方法。然后更新两个列表值,你可以使用过滤器来过滤掉值,并自定义列表。这将触发组件的重新呈现,我猜你会得到你想要的结果。只是为了性能震动和代码和逻辑分裂,使一个新的组件包含所有这些下拉逻辑。

6tdlim6h

6tdlim6h4#

您可以声明两个状态变量来存储每个下拉列表的选定值,并基于状态值实现列表的过滤器。

const options = [
    { name: "Option1", value: "option1" },
    { name: "Option2", value: "option2" },
    { name: "Option3", value: "option3" }
  ];

  const [selectedValue1, setSelectedValue1] = useState("");
  const [selectedValue2, setSelectedValue2] = useState("");

  return (
    <div className="App">
      <div className="select-wrapper">
        <span>Dropdown 1</span>
        <select
          className="select-dropdown"
          onChange={(e) => setSelectedValue1(e.target.value)}
          value={selectedValue1}
        >
          {options
            .filter((x) => x.value !== selectedValue2)
            .map((opt, key) => (
              <option key={key} value={opt.value}>
                {opt.name}
              </option>
            ))}
        </select>
        <span>Dropdown 2</span>
        <select
          className="select-dropdown"
          onChange={(e) => setSelectedValue2(e.target.value)}
          value={selectedValue2}
        >
          {options.map((opt, key) => (
            <option key={key} value={opt.value}>
              {opt.name}
            </option>
          ))}
        </select>
      </div>
    </div>
  );

请参考我编写的单选下拉菜单的示例实现:https://codesandbox.io/s/cranky-liskov-o07jo0?file=/src/App.js

相关问题