2014-11-20 45 views
5

我有一個與按鈕一起工作的計算器來分配值。主要想法是生成公式。這些值被無縫添加到「輸入」中。所有支架輸入您相應的按鈕時,我需要發生的是繼續在括號如何使用Jquery將光標聚焦在兩個括號(括號)之間?

enter image description here

輸入值的Jquery

$(document).ready(function() { 
    $("input:button").click(function() { 
     valor = $(this).val(); 
     actual = $("#ContentPlaceHolder1_formula").val(); 
     if (valor == "C") { 
      $("#ContentPlaceHolder1_formula").val(""); 
     } else { 
      if (valor == "=") { 
       $("#ContentPlaceHolder1_formula").val(eval(actual)); 
      } else { 
       $("#ContentPlaceHolder1_formula").val(actual + valor); 
      } 
     } 
    }); 
}); 

的Html

    <div class="form-group"> 
        <input class="btn" type="button" value="()" id="parentesis" /> 
        <input class="btn" type="button" value="1" id="1" /> 
        <input class="btn" type="button" value="2" id="2" /> 
        <input class="btn" type="button" value="3" id="3" /> 
        <input class="btn" type="button" value="+" id="sumar" /><br /> 
        <input class="btn" type="button" value="4" id="4" /> 
        <input class="btn" type="button" value="5" id="5" /> 
        <input class="btn" type="button" value="6" id="6" /> 
        <input class="btn" type="button" value="-" id="restar" /><br /> 
        <input class="btn" type="button" value="7" id="7" /> 
        <input class="btn" type="button" value="8" id="8" /> 
        <input class="btn" type="button" value="9" id="9" /> 
        <input class="btn" type="button" value="*" id="multiplicar" /><br /> 
        <input class="btn" type="button" value="0" id="0" /> 
        <input class="btn" type="button" value="=" id="igual" /> 
        <input class="btn" type="button" value="C" id="C" /> 
        <input class="btn" type="button" value="/" id="dividir" /> 
        <asp:Button ID="btn_login" OnClick="docreateformula" CssClass="btn btn-primary btn-lg center-block" Text="Guardar" runat="server"/> 
       </div>  

隨着代碼的發生: 5+()3*()+5+3 ,我需要: 5+(3*(5+3))

我怎麼能這樣做?

+6

嘿,你可以把它扔進一個jsfiddle嗎? – philtune 2014-11-20 20:54:03

+1

也許嘗試更改問題標題。您正在詢問字符串操作,而不是關於光標和/或焦點。 – hon2a 2014-11-26 11:02:21

回答

3

您使用下面的代碼,使其工作

function occurrences(string, subString, allowOverlapping) { 

    string+=""; subString+=""; 
    if(subString.length<=0) return string.length+1; 

    var n=0, pos=0; 
    var step=(allowOverlapping)?(1):(subString.length); 

    while(true){ 
     pos=string.indexOf(subString,pos); 
     if(pos>=0){ n++; pos+=step; } else break; 
    } 
    return(n); 
} 

$("input:button").click(function() { 
    valor = $(this).val(); 
    actual = $("#ContentPlaceHolder1_formula").val(); 
    if (valor == "C") { 
     $("#ContentPlaceHolder1_formula").val(""); 
    } 
    else if(valor=="()") 
    { 
    var count1= occurrences(actual,'(',false); 
    var count2= occurrences(actual,')',false); 
     var count=count1+count2; 
     if(count%2==0) { $("#ContentPlaceHolder1_formula").val(actual+"("); 
         } 
     else { 
     $("#ContentPlaceHolder1_formula").val(actual+")"); 
     } 
       } 
    else { 
     if (valor == "=") { 
      $("#ContentPlaceHolder1_formula").val(eval(actual)); 
     } else { 
      $("#ContentPlaceHolder1_formula").val(actual + valor); 
     } 
    } 
}); 

演示鏈接:http://jsfiddle.net/asimshahiddIT/6hje7nvh/

+0

非常感謝您的幫助! – cheloncio 2014-11-26 13:31:38

+0

歡迎您........ – asimshahiddIT 2014-11-27 18:31:44

1

你可以做2種方法。

能分開「(」從按鈕「)」或者你可以試試這個:

if(valor=="()"){ 
    for(i=0;i<actual.lenght;i++){ 
    var aux = actual.IndexOf("(",i); 
    if(aux){ 
    var aux2 = actual.IndexOf(")"); 
    if(aux2){ 
     i=aux2-1; 
    }else{ 
     valor=")"; 
    }else{ 
     valor="("; 
    } 
$("#ContentPlaceHolder1_formula").val(actual + valor); 
+0

語法錯誤 – cheloncio 2014-11-25 05:07:38

0

你不想把你的計算器一個()按鈕,因爲這會阻止您離開括號並繼續公式。只需創建兩個單獨的按鈕(),並且可能會添加一些代碼以計算開括號的數量(當按=時自動完成用戶公式,並防止在沒有打開(時添加))。

1

創建兩個按鈕而不是一個,一個用於(,一個用於),您將沒有問題。

1

你可以像下面這樣做

$(document).ready(function() { 
    var opened=0; 
    $("input:button").click(function() { 
     valor = $(this).val(); 
     actual = $("#ContentPlaceHolder1_formula").val(); 
     if (valor == "C") { 
      $("#ContentPlaceHolder1_formula").val(""); 
     } else { 
      if (valor == "=") { 
       $("#ContentPlaceHolder1_formula").val(eval(actual)); 
      } else {   
       $("#ContentPlaceHolder1_formula").val(actual + valor); 
       if(valor=="()") { 
        input = $("#ContentPlaceHolder1_formula"); 
        input[0].selectionStart = input[0].selectionEnd = input.val().length - 1; 
       } 
      } 
     } 
    }); 

});

1

你可以使用 '(' 和 ')' 這是優於 '()' http://jsfiddle.net/mazin/7yj20umu/

$(document).ready(function() { 
 
    $("input:button").click(function() { 
 
    valor=$(this).val(); 
 
     actual = $('#btn_login').val(); 
 
     if (valor == "C") { 
 
      $('#btn_login').val(""); 
 
     } else { 
 
      if (valor == "=") { 
 
       $('#btn_login').val(eval(actual)); 
 
      } else { 
 
       $('#btn_login').val(actual + valor); 
 
      } 
 
     } 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="form-group"> 
 
        <input class="btn" type="button" value=")" id="parentesis" /> 
 
           <input class="btn" type="button" value="(" id="parentesis" /> 
 

 
        <input class="btn" type="button" value="1" id="1" /> 
 
        <input class="btn" type="button" value="2" id="2" /> 
 
        <input class="btn" type="button" value="3" id="3" /> 
 
        <input class="btn" type="button" value="+" id="sumar" /><br /> 
 
        <input class="btn" type="button" value="4" id="4" /> 
 
        <input class="btn" type="button" value="5" id="5" /> 
 
        <input class="btn" type="button" value="6" id="6" /> 
 
        <input class="btn" type="button" value="-" id="restar" /><br /> 
 
        <input class="btn" type="button" value="7" id="7" /> 
 
        <input class="btn" type="button" value="8" id="8" /> 
 
        <input class="btn" type="button" value="9" id="9" /> 
 
        <input class="btn" type="button" value="*" id="multiplicar" /><br /> 
 
        <input class="btn" type="button" value="0" id="0" /> 
 
        <input class="btn" type="button" value="=" id="igual" /> 
 
        <input class="btn" type="button" value="C" id="C" /> 
 
        <input class="btn" type="button" value="/" id="dividir" /> 
 
      <input ID="btn_login" type="text" OnClick="docreateformula" CssClass="btn btn-primary btn-lg center-block" Text="Guardar"/> 
 
</div>

1

只需添加一個標誌插入點位置。並且在必要時不要忘記重置它。

$(document).ready(function() { 
    var flag = 0; // the insert point 
    $("input:button").click(function() { 
     valor = $(this).val(); 
     actual = $("#ContentPlaceHolder1_formula").val(); 
     if (valor == "C") { 
      $("#ContentPlaceHolder1_formula").val(""); 
      flag = 0; // reset the flag 
     } else if (valor == "=") { 
      $("#ContentPlaceHolder1_formula").val(eval(actual)); 
      flag = 0; // reset the flag 
     } else { 
      // split current valor at the insert point and concat with insertion 
      $("#ContentPlaceHolder1_formula").val(actual.slice(0, flag) + valor + actual.slice(flag)); 
      flag++; // increase flag by 1 
     } 
    }); 
}); 
相關問題