使用Javascript取消选择文本

4

我在一个HTML页面的表单中有两个带数字ID的输入标签。 当第一个输入标签获得焦点时,我想从第一个输入标签的前两个字符设置第二个输入标签的值。 然后,我想取消第二个输入标签中所选的文本。 有一种方法可以做到这一点吗?

我编写了以下HTML代码:

<label>Num. Fattura:
        <input type="text" name="numfattura1" onkeypress="return event.keyCode != 13" id="1" />
    </label>
    <label>Importo:
        <input type="text" name="importo1" onkeypress="return event.keyCode != 13" />
    </label>
    <br />
    <label>Num. Fattura:
        <input type="text" name="numfattura2" onkeypress="return event.keyCode != 13" id="2" onfocus="twoDigits(2)" />
    </label>
    <label>Importo:
        <input type="text" name="importo2" onkeypress="return event.keyCode != 13" />
    </label>
    <br />

并且这个 JavaScript 函数:

function twoDigits(id){
    var previousId = id - 1;
    var prevoiusValue = document.getElementById(previousId).value;
    document.getElementById(id).value = prevoiusValue.substring(0,2);
    document.selection.empty();
    window.getSelection().removeAllRanges()
}

我找不到如何取消自动选择的文本。


https://dev59.com/NXRA5IYBdhLWcg3w4SDo - Birey
谢谢,但我不使用JQuery :D - Andrea Venanzi
3个回答

2

使用setTimeout设置selectionStart和selectionEnd。

http://jsfiddle.net/enQvT/在Firefox中可用。

function twoDigits(id){
    var previousId = id - 1;
    var prevoiusValue = document.getElementById(previousId).value;

    var elem = document.getElementById(id);
    setTimeout(function() {
               elem.selectionStart=0;
                elem.selectionEnd=0;
                }, 0);
    elem.value = prevoiusValue.substring(0,2);
}

1

你也可以清空并重新填充输入。 如果你想要测试:

<input type="textfield" id="aaa" value="aaa" />
<input type="textfield" id="bbb" value="bbb" onmouseover="empty()"  />

<script>
var empty = function() {
    var ipt = document.getElementById('aaa');
    var iptval = ipt.value;
    ipt.value = "";
    ipt.value = iptval;
}
</script>

1
你确定吗?你是怎么调用它的?它对我很有效。 - Yuri Ghensev
我在我的 twoDigits(id) 函数中调用了你的函数 (在 var empty = function(id) { var ipt = document.getElementById(id);} 中进行了修改),并使用以下代码调用: empty(id); 在Safari中无法正常工作,文本仍然处于选定状态 :( - Andrea Venanzi

1

在另一个表单元素上调用.focus()


谢谢,但我不能...在第二个输入值更改后,我必须修改文本... - Andrea Venanzi
@AndreaVenanzi,那我不明白你想要实现什么。 - mikerobi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接