I have two buttons, Expense and Income in a form. If the user clicks Expense, I want to set in a hidden fld the value to “Expense”
So I have tried various ways of getting this to work. no luck. What am I doing wrong?
code:
export default class extends ApplicationController {
connect () {
and from my show.html.erb:@cashflow.id  %>
             
            
              
            
           
          
            
            
              Calling super.connect()? 
My understanding is that this is not necessary given we are extending ApplicationController - the controller will connect automatically. Please also confirm that the controller is in fact connecting?
Event Handler 
Have you added the click event handler in the form?
<%= form.hidden_field :cashflow_id, value:@cashflow.id  %>“action”:"click->entryliner#clicktype" 
Side note: WARNING - Users might tamper with the data 
If you’re doing all of this on the front end, then users will be able to tamper the data, and change something which should be an expense, into something that is not.
             
            
              
            
           
          
            
              
                dan  
              
                  
                    January 25, 2021, 11:46pm
                   
                  5 
               
             
            
              I don’t entirely follow your code, but this would be my take:
// entryline_controller.js
export default class extends ApplicationController {
  static targets = ["typeField"]
  clicktype(event) {
    event.preventDefault()
    this.typeFieldTarget.value = event.target.textContent
  }
}
// show.html.erb
<div data-controller="entryline">
  <%= form.button "Expense", data: { action: "entryline#clicktype" } %>
  <%= form.button "Income", data: { action: "entryline#clicktype" } %>
  <%= form.hidden_field :item_type, value: “Expense”, data: { entryline_target: “typeField” } %>
</div>
The key thing here is  event.target  , which gives you the button you clicked that resulted in the clicktype call.
One thought came to mind: presumably there’s a reason you can’t use a checkbox ?
             
            
              1 Like 
            
            
           
          
            
            
              this needs the event associated with a particular action?
 action: "**event_to_add**->entryline#clicktype"
 
            
              
            
           
          
            
              
                dan  
              
                  
                    January 25, 2021, 11:49pm
                   
                  7 
               
             
            
              Nah, Stimulus handles that for you for button clicks: Stimulus Reference: Actions 
             
            
              1 Like 
            
            
           
          
            
            
              the key for me was event.target.textContent that gave me a value I could conditionally act on.
where do I find a list of other things I can get from target?
             
            
              
            
           
          
            
              
                dan  
              
                  
                    January 26, 2021,  1:12am
                   
                  9 
               
             
            
              It’s just a HTMLElement , so you can call anything you want, really.
             
            
              
            
           
          
            
              
                minimul  
              
                  
                    January 26, 2021,  2:43pm
                   
                  10 
               
             
            
              An alternate solution would be to use the HTML attributes of formaction  and formmethod .
For example, I have a “Create” button that submits using the main form tag. I then have a “Save” button n next to it that submits the form elements to a custom route and HTTP method:
<%= f.button "Save",
        formmethod: :post,
        formaction: account_saved_shipments_path(current_account), 
        class: tw_button, data: { disable_with: tw_spinner } %>
This approach will keep your Rails controller code cleaner as well.
             
            
              1 Like