2014-11-20 14 views
5

Ich habe einen Taschenrechner, der mit Tasten arbeitet, um Werte zuzuweisen. Die Hauptidee besteht darin, Formeln zu generieren. Die Werte werden nahtlos in eine "Eingabe" eingefügt. Alle Klammern, wenn der jeweilige Taste Eingabe, ich muss geschehen ist, weiterhin Werte in Klammern EingabeWie den Cursor zwischen zwei Klammern (Klammern) mit 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>  

Mit diesem Code passiert das: 5+()3*()+5+3 und ich brauche: 5+(3*(5+3))

Wie kann ich das tun?

+6

Hey, könntest du das in ein Spiel werfen? – philtune

+1

Vielleicht versuchen, den Titel der Frage zu ändern. Sie fragen nach Zeichenfolgenoperationen, nicht nach Cursor und/oder Fokus. – hon2a

Antwort

3

Sie verwenden den folgenden Code, um es

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); 
     } 
    } 
}); 

Demo Link funktioniert: http://jsfiddle.net/asimshahiddIT/6hje7nvh/

+0

Vielen Dank für Ihre Hilfe! – cheloncio

+0

Ihre Begrüßung ........ – asimshahiddIT

1

Sie können 2 Möglichkeiten.

Kann trennen den ‚(‘ Button von ‚)‘ oder Sie können versuchen, diese:

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

Syntaxis Fehler in der letzten sonst – cheloncio

0

Sie wollen nicht eine einzige ()-Taste auf Ihrem Rechner setzen, da dies verhindert, dass Sie den Abgang Klammern und Fortsetzung der Formel. Erstellen Sie einfach zwei separate Tasten ( und ) und fügen Sie möglicherweise einen Code zum Zählen der Anzahl der öffnenden Klammern hinzu (um die Formel für den Benutzer automatisch zu beenden, wenn Sie = drücken und das Hinzufügen von ) verhindern, wenn keine ( geöffnet ist).

1

Erstellen Sie zwei Tasten statt einer, eine für ( und eine für ) und Sie werden kein Problem haben.

1

Sie können es tun, wie diese

$(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

können Sie '(' und ')' es besser sein, als '()' 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

einfach eine Flagge für die Position Einsatzpunkt hinzufügen. Und vergessen Sie nicht, es bei Bedarf neu einzustellen.

$(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 
     } 
    }); 
});