2016-04-24 15 views
0

Angenommen, es gibt ein .NET-Bootstrap-Formular mit mehreren Eingabetasten. Wenn ein Benutzer die Eingabetaste drückt, wird der Standardschaltflächenwert an den Controller gesendet, unabhängig davon, in welchem ​​Bereich der Benutzer Daten ändert. Ich denke, der Code bestimmt, welches Panel aktiv ist und welche Schaltfläche diesem Panel entspricht, aber wie sendet man den Button-Wert des richtigen Panels an den Controller? $ engestButton.Submit(); hat nicht funktioniert und ich kann die Antwort nicht finden die Fragen hier suchend. Danke im Voraus!Schaltfläche Wert an Controller senden von Skript

Der Controller:

[HttpPost] 
public ActionResult SaveData(SaveDataViewModel model, string buttonCommand) 
{ 
    if (buttonCommand == "Save Basics") 
    { 
     //Do stuff 
    } 
    else if (buttonCommand == "Save Owner") 
    { 
     //Do other stuff 
    } 
    return View(); 
} 

The View:

<div class="row"> 
    <div class="col-lg-12"> 
     <div class="panel panel-default" id="basicsPanel"> 
      <div class="panel-heading">Basic Info</div> 
      <div class="panel-body"> 
       <div class="row"> 
        <!-- Text boxes and such --> 
       </div> 
       <div class="row"> 
        <!-- This is the default button upon pressing Enter key, and its value is always sent to the Controller --> 
        <button type="submit" id="saveBasics" name="buttonCommand" class="btn btn-success pull-right" value="Save Basics">Save Basics</button> 
       </div> 
      </div> 
     </div> 
    </div> 
</div> 
<div class="row"> 
    <div class="col-lg-12"> 
     <div class="panel panel-info" id="ownerPanel"> 
      <div class="panel-heading">Owner</div> 
      <div class="panel-body"> 
       <div class="row"> 
        <div class="col-lg-4"> 
         <!-- Other text boxes and such --> 
        </div> 
       </div> 
       <div class="row"> 
        <div class="col-lg-12 text-right"> 
         <!-- This button should be the one used when a User presses the Enter key while filling in data in this panel --> 
         <button type="submit" id="saveOwner" name="buttonCommand" class="btn btn-success" value="Save Owner">Save Owner</button> 
        </div> 
       </div> 
      </div> 
     </div> 
    </div> 
</div> 

, schließlich das Skript, das die Schaltfläche erkennt gedrückt wurde, kann aber nicht den Wert von "Button" gesetzt:

$(document).keypress(function (e) { 
    if (e.which == 13) { 
     var $activeElement = document.activeElement.id; 
     var $closestPanel = $($activeElement).closest('panel'); 
     var $closestButton = $($closestPanel).children('input[type=submit]'); 
     //Got the intended button, now how to send its value? 
    } 
}); 
+0

Dies sollte Ihnen helfen http://stackoverflow.com/questions/4825295/javascript-onclick-to-get-the-id-of-the-clicked-button – jamiedanq

+0

eine weitere Option ist es, sie eindeutige Namen – jamiedanq

+0

@jamiedanq zu geben es ist bekannt, dass die Taste "gedrückt" ist, da sie immer die Standardtaste ist. Die Schaltfläche für das Panel, in dem der Benutzer arbeitet, ist auch über das Skript bekannt. Was benötigt wird, ist die Fähigkeit, die Standardschaltfläche zu ersetzen, die durch Drücken der Eingabetaste immer an den Controller mit der Schaltfläche in dem Skript gesendet wird, das der Benutzer zu aktivieren beabsichtigt. Außerdem ist diese Standardschaltfläche für die Eingabetaste nicht betroffen, wenn die Namen der Schaltflächen geändert werden (Methode 1 in diesem Link): http://www.dotnet-tricks.com/Tutorial/mvc/cM1X161112-Handling-multiple-submit-buttons- auf der gleichen Form --- MVC-Razor.html – jle

Antwort

0

Die Antwort hier war: a) erfassen Sie ein Tastendruckereignis und testen Sie, ob es die Eingabetaste ist; b) Wenn dies der Fall ist, rufen Sie eine Funktion auf, um das Standardverhalten zu verhindern. c) das aktive Element erhalten; d) Erhalte das ID-Attribut des nächsten Panels; e) Überprüfen Sie, ob der Name des Panels mit einem der Panel-Namen der Seite übereinstimmt, und rufen Sie die Schaltfläche id eines Buttons auf.

Verwandte Themen