Javascript 谷歌电子表格如何在不改变焦点的情况下检测手机点击

Javascript 谷歌电子表格如何在不改变焦点的情况下检测手机点击,javascript,jquery,google-sheets,Javascript,Jquery,Google Sheets,我正在制作我自己的基于网络的电子表格。我有它的检测公式和其他细胞参考。我想做的下一步是 当我激活功能栏时(在焦点中),如果我的第一个字符是等号,我单击另一个单元格,我希望能够检测到该单元格,然后返回到公式栏并插入该单元格位置 我遇到的问题是如何在单元格没有聚焦的情况下跟踪从公式栏到单元格的移动。其余的我都不会有问题。我用JavaScript做了大部分工作,并使用了一个公平的jQuery块。我只是还没弄清楚该跟踪哪些事件 举个例子,我正在开发的网站被锁定了,但是制作谷歌电子表格,甚至使用Excel

我正在制作我自己的基于网络的电子表格。我有它的检测公式和其他细胞参考。我想做的下一步是

当我激活功能栏时(在焦点中),如果我的第一个字符是等号,我单击另一个单元格,我希望能够检测到该单元格,然后返回到公式栏并插入该单元格位置

我遇到的问题是如何在单元格没有聚焦的情况下跟踪从公式栏到单元格的移动。其余的我都不会有问题。我用JavaScript做了大部分工作,并使用了一个公平的jQuery块。我只是还没弄清楚该跟踪哪些事件

举个例子,我正在开发的网站被锁定了,但是制作谷歌电子表格,甚至使用Excel,你应该看到我正在谈论的例子

公式栏是文本输入,所有单元格都在一个表中,并且都是文本输入。

使用“mousedown”事件并防止立即传播。这样可以防止出现焦点,允许您引用文本输入,但不向其发送焦点

$(".cell input[type=text]").mousedown(function(event){

    if($("#formulaBar").val()[0] == "+"){

        event.stopImmediatePropagation();

        var cell = $(this).parent();
        var row = cell.attr("data-row");
        var col = cell.attr("data-column");

        //Do something with the formula bar
    }

});
我假设HTML标记是这样的:

<td data-row="0" data-column="0">
    <input type="text" />
</td>

您好,这是一个关于如何使用focusOut和by以及focus执行此操作的示例,如果公式文本框以“=”开头,则您可以添加单元格坐标并将焦点返回到公式文本框,如果您单击“输入公式完成并保存公式”或其他任何操作

<html>
    <head>
    <script src="http://code.jquery.com/jquery-1.8.3.js"></script>
    </head>
    <body>
    <input type="text" id="txtFormular" style="width:100%"/>
    <br />
    <input type="text"  id="txtCell1" Coord="A1"  style="width:50px"/>
    <input type="text"  id="txtCell2" Coord="A2" style="width:50px"/> 
    <input type="text"  id="txtCell3" Coord="A3" style="width:50px"/>
    <input type="text"  id="txtCell4" Coord="A4" style="width:50px"/>
    <input type="text"  id="txtCell5" Coord="A5" style="width:50px"/>
    <input type="text"  id="txtCell6" Coord="A6" style="width:50px"/>
    <input type="text"  id="txtCell7" Coord="A7" style="width:50px"/>
    <script>
    $(function(){
        var formulaOn = false;
        $("#txtFormular").focusout(function(){
        if(this.value.indexOf("=") == 0)
        formulaOn = true
        else
        formulaOn = false;
        });
        $('#txtFormular').keypress(function (e) {
          if (e.which == 13) {
            //Save you formula
            this.value = "";
            this.blur();
          }
        });
        $("input[id^='txtCell']").focus(function(){
            if(formulaOn)
            {
                var txtFormulaVal = $("#txtFormular").val();
                $("#txtFormular").val(txtFormulaVal +$(this).attr("Coord"));
                $("#txtFormular").focus();
            }
        });
    });
    </script>
    </body>
    </html>


$(函数(){ var公式=假; $(“#txtFormular”).focusout(函数(){ if(this.value.indexOf(“=”)=0) 公式=真 其他的 公式=假; }); $('#txtFormular')。按键(功能(e){ 如果(e.which==13){ //拯救你的公式 此值为“”; 这个。blur(); } }); $(“输入[id^='txtCell'])。焦点(函数(){ 如果(公式) { var txtFormulaVal=$(“#txtFormular”).val(); $(“#txtFormular”).val(txtFormulaVal+$(this.attr(“Coord”)); $(“#txtFormular”).focus(); } }); });
回答了一半,在这种情况下,我如何检测我来自公式栏?我还没有看到.stopImmediatePropagation()函数,所以我现在也在检查它。看起来它可以做到这一点。谢谢所以这确实给我带来了另一个我没有想到的情况。我需要一种更广泛的方式来跟踪点击,比如我在哪里,我来自哪里。例如,如果我在公式栏中单击一个单元格,而公式栏正在编写一个函数(0处的字符为“=”),那么我希望获取我单击的单元格并将其附加到公式栏。但我还需要一种方法来单击公式栏,这样我就可以从其他单元格中进行操作。为什么谷歌要让一切看起来如此简单?