我有一个可折叠的东西,你可以点击它来显示或隐藏下拉菜单.目前,只能单击单选按钮所在位置.我想要的是整个区域是可点击的,这样你就可以通过点击那里的任何地方来 Select 下拉列表.我怎么才能做到这一点呢?

enter image description here

Codesandbox->CLICK HERE

<Collapse in={expanded} timeout="auto" unmountOnExit>
  <Card className="mb-2">
    <CardContent className="p-0">
      <FormControl className="w-100" component="fieldset">
        <RadioGroup value={activeOption} onChange={onSubOptionClicked}>
          {subOptions.map((subOption) => (
            <ListSubOptionItem
              {...subOption}
              activeOption={activeOption}
              key={subOption.label}
            />
          ))}
        </RadioGroup>
      </FormControl>
    </CardContent>
  </Card>
</Collapse>

推荐答案

更新ListSubOptionItem组件以将所有UI/可视内容呈现为输入/控件的标签,以便完全可以点击.

import {
  ...,
  FormControlLabel as BaseFormControlLabel,
  ...,
  styled,
} from "@mui/material";
const StyledListSubOptionLabel = styled(ListItemText)({
  // marginLeft: "32px", <-- Removed
  marginTop: "-4px !important"
});

...

const FormControlLabel = styled(BaseFormControlLabel)({
  alignItems: "baseline", // <-- align checkmark with text
  ".MuiFormControlLabel-label": {
    flexGrow: 1, // <-- so label grows to fill width
  },
});
const ListSubOptionItem = ({
  imgUrl,
  label,
  subLabel,
  maxWidth,
  disabled = false,
  value = null,
  activeOption = null
}) => {
  return (
    <FormControlLabel
      disabled={disabled ?? false}
      className={classNames("m-0 sub-option-item", {
        active: activeOption === value
      })}
      control={<StyledRadio />}
      label={
        <StyledListSubOptionItemWrapper
          className={classNames("d-flex justify-content-between py-3 pr-3", {
            "align-items-start": !!subLabel,
            "align-items-center": !subLabel
          })}
        >
          <Stack>
            {label}
            {subLabel && (
              <StyledListSubOptionLabel
                classes={{ secondary: "text-gray" }}
                secondary={subLabel}
              />
            )}
          </Stack>
          {imgUrl && (
            <img
              src={imgUrl}
              alt={imgUrl}
              {...(subLabel && { className: "mt-1" })}
              style={{
                opacity: disabled ? 0.2 : 1,
                maxWidth: maxWidth ?? "80px",
                width: "100%"
              }}
            />
          )}
        </StyledListSubOptionItemWrapper>
      }
      value={value}
    />
  );
};

Edit select-dropdown-can-be-clicked-in-react

Javascript相关问答推荐

如何expose 像React在onChange、onClick等中所做的那样的参数?

单击按钮后未清除 Select

布局样式在刷新时不持续

React Native平面列表自动滚动

微软Edge Select 间隙鼠标退出问题

Snowflake JavaScript存储过程返回成功,尽管预期失败

使用Java脚本根据按下的按钮更改S文本

如何从隐藏/显示中删除其中一个点击?

制作钢琴模拟器,并且在控制台中不会执行或显示该脚本

在执行异步导入之前判断模块是否已导入()

JQuery Click事件不适用于动态创建的按钮

在Java中寻找三次Bezier曲线上的点及其Angular

Web Crypto API解密失败,RSA-OAEP

当我try 将值更改为True时,按钮不会锁定

从逗号和破折号分隔的给定字符串中查找所有有效的星期几

将基元传递给THEN处理程序

ComponentWillReceiveProps仍在React 18.2.0中工作

如何在Web项目中同步语音合成和文本 colored颜色 更改

在范围数组中查找公共(包含)范围

扩散运算符未按预期工作,引发语法错误