【问题标题】:Clicking programmatically on the arrows of html inputs (type="number")以编程方式单击 html 输入的箭头 (type="number")
【发布时间】:2019-05-09 15:18:23
【问题描述】:

假设我的 html 代码中有一个输入元素,类型为 number 和两个按钮:

function downFunction(id) {
  let inputField = document.getElementById(id);
  // How to increment the value?
  log("Log from downFunction", inputField)
}

function upFunction(id) {
  let inputField = document.getElementById(id);
  // How to decrement the value?
  log("Log from upFunction", inputField)
}

function log(message, element) {
  console.log(message);
  console.log(element);
  console.log("\n");
}
<input type="number" id="inputFieldId" min="1" max="10" value="10">

<input type="button" id="downButton" onclick="downFunction('inputFieldId')" value="-"/>
<input type="button" id="upButton" onclick="upFunction('inputFieldId')" value="+" />

是否可以通过单击upButtondownButton 分别使用javascript 或最终使用jQuery 来增加/减少inputFieldId 的值?

我的意思不是在执行++-- 操作后获取字段的当前值并重新设置新值。
我的意思是直接点击箭头按钮。

为了更好地理解,做一些类似的事情:

let inputField = document.getElementById(id);  
inputField[0].arrowUp.click();  
inputField[0].arrowDown.click();

【问题讨论】:

  • 这可能是不可能的。
  • 只需获取输入的引用并设置值。无需点击。
  • 是的,我知道这是正确的方法,但我很想知道是否可以点击箭头 :)
  • 但你为什么要这样?

标签: javascript jquery html


【解决方案1】:

您可以在input[type=number] HTMLElement 上使用stepUpstepDown 方法

stepUp Documentation stepDown Documentation

function stepUp() {
  document.getElementById('input').stepUp();
}

function stepDown() {
  document.getElementById('input').stepDown();
}
<input id=input type=number min=1 max=10>
<button onclick="stepUp()">+</button>
<button onclick="stepDown()">-</button>

【讨论】:

  • 这正是我想要的。谢谢您的帮助!我找不到文档。也感谢您提供链接参考:)
  • @RobertoManfreda:这是一个有趣的 API,但它不模拟对按钮的点击。您是否真的希望以尊重minmax 的方式增加/减少?
  • 是的,但是为什么???运行代码 sn-p all 正在运行...我修改了答案的原始片段,只需添加 stepUp() 和 stepDown() 调用,一切正常! o.O
  • 它们是在 input[type=number] 元素 (html.spec.whatwg.org/multipage/input.html#dom-input-stepup) 上可用的方法
  • @RobertoManfreda 如果您觉得我的回答有帮助,请点赞。这对我也有帮助。
【解决方案2】:

您将无法以编程方式单击 input type="number" 的箭头,但您不必这样做,因为这不是您真正想要做的。如果用户单击了这些箭头,您想要做的是相同的操作。因此,您可以自己启动该代码。在这种情况下,只需调整元素的value即可。

【讨论】:

  • “这不是你真正想要做的” 除非它真的是。如果他们想模拟实际的用户交互怎么办?
  • @ziggywiggy 目的是什么?
  • 对不起,但你的回答并不完全正确......在某些情况下我需要这样做......
  • 这取决于个人的意图。至少,您需要在那种情况下代表事件。
【解决方案3】:

获取上/下按钮坐标。

$('#upButton').click(function (e){
    var elm = $(this);
    var xPos = e.pageX - elm.offset().left;
    var yPos = e.pageY - elm.offset().top;
​
    console.log(xPos, yPos);
});

点击这些坐标。

var event = $.Event('click');
event.clientX = 12.796875;
event.clientY = 9;
$('.upButton').trigger(event);

【讨论】:

  • 您的 sn-p 执行不正确,但我认为您的解决方案也可以工作......即使我不想为此目的使用 jQuery :)
  • 是的,我希望它会起作用,但这可能取决于分辨率等等。我把它拿出来,但你可以测试。我确实成功地让它发挥了作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-11
  • 1970-01-01
  • 1970-01-01
  • 2019-09-02
  • 2017-05-06
  • 2011-08-26
相关资源
最近更新 更多