代码之家  ›  专栏  ›  技术社区  ›  Samuel Ramzan

通过外部锚点输入值时的文本区域行计数

  •  0
  • Samuel Ramzan  · 技术社区  · 14 年前

    最重要的是,公交车上的小问题对我来说是个大问题。

    工作示例 http://jsfiddle.net/auvi1/QSe4M/3/

    正如您在示例中看到的,单击链接会将值传递到文本区域,但是, 我就是无法处理行计数脚本。 如果我在文本区域内单击,它会计算行数,但这不是我希望它做的,我希望它在文本区域中输入值时自动递增计数框。这有意义吗?

    <script type='text/javascript'>
        window.onload = btnsInit;
    
        function btnsInit() {
            var i, a = document.getElementById('btns').getElementsByTagName('a');
            for (i = 0; i < a.length; ++i) {
                a[i].onclick = btnClick;
            }
        }
    
        function btnClick(e) {
            document.getElementById('myTextarea').value += '' + this.firstChild.nodeValue + '\n';
            xPreventDefault(e);
            trim();
            console.log("#myTextarea =", document.getElementById('myTextarea').value);
            return false;
        }
    
        function xPreventDefault(e) {
            if (e && e.preventDefault) e.preventDefault();
            else if (window.event) window.event.returnValue = false;
        }
    
        function cuentaRenglones(area) {
            var renglones = area.value.replace((new RegExp(".{" + area.cols + "}", "g")), "\n").split("\n");
            if (renglones[renglones.length - 1] == "") renglones.length--;
            area.form.contador.value = renglones.length;
        }
    </script>
    <div id='btns'>
        <form>
            <textarea rows="10" id='myTextarea' style="" name=" " onclick="cuentaRenglones(this)"></textarea>
            <br>Lines:
            <input type=text name="contador" size="2" value="0">
        </form>
        <a onclick='return false' href=' '>Link1</a>
        <a onclick='return false' href=' '>Link2</a>
        <a onclick='return false' href=' '>Link3</a>
        <a onclick='return false' href=' '>Link4</a>
    </div>
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   guiligan    14 年前

    看看这个:

    http://jsfiddle.net/Eb4U7/

    我已经更改为keyup事件,但也添加了在您单击链接后计算行数的命令,否则它只会在您编辑文本区域中的内容时更新计数。

    <script type='text/javascript'>
    window.onload=btnsInit;
    function btnsInit() {
        var i,a=document.getElementById('btns').getElementsByTagName('a');
        for(i=0;i < a.length;++i) {
            a[i].onclick=btnClick;
        }
    }
    
    function btnClick(e) {
        document.getElementById('myTextarea').value += '' + this.firstChild.nodeValue + '\n';
        xPreventDefault(e);
        cuentaRenglones(document.getElementById('myTextarea'));
        trim();
        console.log("#myTextarea =", document.getElementById('myTextarea').value);
    
        return false;
    }
    
    function xPreventDefault(e) {
        if(e && e.preventDefault)e.preventDefault();
        else if(window.event)window.event.returnValue=false;
    }
    
    function cuentaRenglones(area){
        var renglones = area.value.replace((new RegExp(".{"+area.cols+"}","g")),"\n").split("\n");
        if(renglones[renglones.length-1]=="") renglones.length--;
            area.form.contador.value = renglones.length;
    }
    </script>
    <div id='btns'>
    <form>
    <textarea rows="10" id='myTextarea' style="" name=" "  onkeyup="cuentaRenglones(this)"></textarea>
    <br>
    Lines:
    <input type=text name="contador" size="2" value="0">
    </form>
    <a  onclick='return false'href=' '>Link1</a>
    <a  onclick='return false' href=' '>Link2</a>
    <a  onclick='return false' href=' '>Link3</a>
    <a  onclick='return false' href=' '>Link4</a>
    </div>​