iOS 的触摸/点击事件内部触发不起作用

Trigger inside of a touch/click event for iOS does not work

提问人:Ole M 提问时间:2/8/2023 最后编辑:Ole M 更新时间:2/8/2023 访问量:405

问:

我正在开发一个移动应用程序,我希望我的用户单击图像,并为此打开其设备的本机日期时间选择器应用程序。

注意:这适用于 android - 只是不适用于 iOS。

HTML格式:

<i class="fa fa-clock-o fa-2x" id="datetime_picker"></i>
<label id="new-incident-time-of-incident-label" class="label-datetime" data-field="IncidentDate" style="white-space: nowrap;"></label>
<input id="input" type="datetime-local" style="position: absolute; left: 9999px;"/>

从上面的代码中可以看出,我将输入扔到一边,让它留在 DOM 中,但不可见(我尝试了其他方法,例如 ,但这导致了其他问题)。它看起来像这样:display: nonevisibility: hidden

enter image description here

当用户单击 -element 时,用于显示 中选择的值。labelinputi

所以,也许这看起来有点奇怪,但它适用于安卓设备。 对于 iOS 来说不是那么多。

这是我的JS:

$("#datetime_picker").on("touchend", () => {

    $("#input").trigger("click");
});

我尝试了-, -, -事件的组合,但无济于事。clicktouchendtouchstart

这是所有的JS代码,以防需要参考(你永远不知道......

const $input = $("#input");
let initDone = false;

function setValue(date) {
  $input.val(new XDate(date).toString("yyyy-MM-dd'T'hh:mm"));
  $("#new-incident-time-of-incident-label").text(new XDate(date).toString("yyyy-MM-dd'T'hh:mm"));
}

dsIncident.attachEvent("onDataLoaded", () => {
  if (initDone) {
    return;
  }
  initDone = true;
  const date = dsIncident.currentRow("IncidentDate");
  console.log("Initial date set:", date);
  setValue(date);
});

$("#input").on("input", () => {
  const date = new XDate($input.val())[0];
  console.log("Date changed:", date);
  dsIncident.currentRow("IncidentDate", date);
});

$("#datetime_picker").on("touchend", () => {

    $("#input").trigger("click");
});
JavaScript jQuery iOS DateTime 移动版

评论

0赞 CBroe 2/8/2023
这首先是对 a 的误用。这里的标签应该是“这是要点击的”部分 - 点击标签应该将焦点设置在相应的输入字段上。将其他内容用于输出。label
0赞 CBroe 2/8/2023
当您不对输入字段执行任何操作,而只是将其保持在正常流程中,而没有任何额外的格式时,整个事情是否首先起作用(在 iOS 上)?
0赞 Ole M 2/8/2023
@Cbroe,如果我将输入保留为“自然形式”,并将其连接到 <i> 元素,以便 <i> 元素接收点击,它将无法在 iOS 上运行 - 但可以在 android 上运行。与我上面介绍的解决方案相同。据我所知,隐藏或置换输入没有区别。
0赞 Ole M 2/8/2023
@CBroe,至于你对标签的评论,旨在突出其输入;我不知道这一点,并将在我的代码中实现它。但这与最上面的标签有关,而不是与底部的标签有关。
0赞 CBroe 2/8/2023
“隐藏或替换输入没有区别”——好吧,但至少要测试这一点。(有时这样的东西不起作用,因为元素被隐藏或移动了;例如,浏览器可能会尝试将弹出位置定向到输入字段本身的位置。

答:

1赞 CBroe 2/8/2023 #1

隐藏或置换输入没有区别

好的,但至少要测试一下很重要。有时这样的东西不起作用,因为元素被隐藏或移动了;例如,浏览器可能会尝试将弹出窗口位置定向到输入字段本身的位置。

您可以尝试定位输入字段,以便在单击时触发弹出窗口的部分位于应该触发此按钮的“时钟”图标后面。 在图标本身上(以便单击/点击可以穿过它),并且输入字段本身“隐藏”了 or something。(不是,这通常会触发元素无法再次“交互”的问题。pointer-events: noneopacity: .01opacity: 0