0

I want to write multiple buttons in one function using javascript/jquery. My problem is that

  1. Everytime im writing a separate function for each button with separate onclick event like in the below code snippet
  2. I want to write one function that includes multiple buttons

function todaySales() {
  alert('button1');
}

function yesterdaySales() {
  alert('button2');
}

function wtdsales() {
  alert('button3');
}

function llsales() {
  alert('button4');
}

function lastSevenDays() {
  alert('button5');
}

function lastThirtyDays() {
  alert('button6');
}
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" rel="stylesheet" />
<button id="but1" class="btn btn-outline-info" onclick="todaySales();">Today</button>
<button id="but2" class="btn btn-outline-info" onclick="yesterdaySales();">Yesterday</button>
<button id="but3" class="btn btn-outline-info" onclick="wtdsales();">WTD</button>
<button id="but4" class="btn btn-outline-info" onclick="llsales();">MTD</button>
<button id="but5" class="btn btn-outline-info" onclick="lastSevenDays();">Last 7 Days</button>
<button id="but6" class="btn btn-outline-info" onclick="lastThirtyDays()">Last 30 Days</button>
adiga
  • 34,372
  • 9
  • 61
  • 83
LiN
  • 125
  • 1
  • 14
  • Possible duplicate of [Using the same function with multiple buttons](https://stackoverflow.com/questions/46462171/using-the-same-function-with-multiple-buttons) and [call the same jQuery function in multiple buttons](https://stackoverflow.com/questions/13083106) and [Using multiple buttons on same function that redirects to different functions](https://stackoverflow.com/questions/18410341) – adiga Feb 28 '19 at 09:17
  • 1
    (The third duplicate is much more cleaner and closer to what you want to achieve) – adiga Feb 28 '19 at 09:22

6 Answers6

2

You can give the same function name with different parameter value like

<button id="but1" class="btn btn-outline-info" onclick="salesAction(this, 'todaySales');">Today</button>
<button id="but2" class="btn btn-outline-info" onclick="salesAction(this, 'yesterdaySales');">Yesterday</button>
<button id="but3" class="btn btn-outline-info" onclick="salesAction(this, 'wtdsales');">WTD</button>
<button id="but4" class="btn btn-outline-info" onclick="salesAction(this, 'llsales');">MTD</button>
<button id="but5" class="btn btn-outline-info" onclick="salesAction(this, 'lastSevenDays');">Last 7 Days</button>
<button id="but6" class="btn btn-outline-info" onclick="salesAction(this, 'lastThirtyDays')">Last 30 Days</button>

<script>
function salesAction(thisObj, $salesVal){
  console.log($salesVal);
  // use switch to write separate logic for each sales
}
</script>

example : https://codepen.io/kaslab/pen/rROyVr

Kanha Sahu
  • 101
  • 5
1
    function clickButton(buttonName){
      alert(buttonName);
    }

just need seed a params to function. It's easy.

user8930932
  • 125
  • 1
  • 9
1

You can use the same click handler function and just strip data out of your button's properties or you can pass data as parameters to that function.

function clickHandler(ev) {
  var target = event.target
  console.log(target.id, target.textContent) // or whatever property
  
}
<button id="but1" class="btn btn-outline-info" onclick="clickHandler();">Today</button>
<button id="but2" class="btn btn-outline-info" onclick="clickHandler();">Yesterday</button>
<button id="but3" class="btn btn-outline-info" onclick="clickHandler();">WTD</button>
<button id="but4" class="btn btn-outline-info" onclick="clickHandler();">MTD</button>
<button id="but5" class="btn btn-outline-info" onclick="clickHandler();">Last 7 Days</button>
<button id="but6" class="btn btn-outline-info" onclick="clickHandler();">Last 30 Days</button>
iacobalin
  • 523
  • 2
  • 9
0

Try it

      $(document).ready(function(){
          $(".btn").on('click',function() {
              alert( $(this).text())
          });
      });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js">

</script>
<button id="but1" class="btn btn-outline-info">Today</button>
<button id="but2" class="btn btn-outline-info">Yesterday</button>
<button id="but3" class="btn btn-outline-info">WTD</button>
<button id="but4" class="btn btn-outline-info">MTD</button>
<button id="but5" class="btn btn-outline-info">Last 7 Days</button>
<button id="but6" class="btn btn-outline-info">Last 30</button>
pedram shabani
  • 1,654
  • 2
  • 20
  • 30
0

using jQuery is very simple: suppose your buttons are direct children of a div element having id=“buttonsArray”

$(‘#buttonsArray’).on(‘click’, ‘button’, function() {
        alert($(this));
    });

As you can see, this overload of the .on() method let you dynamically bind to the clicked element. You can use data attribute within every button to create a switch statement inside that function and then differentiate behavior of your function depending on what button was pressed

<button data-value=“oneValue”>
<button data-value=“otherValue”>

The switch statement:

var myValue = $(this).data()[“value”]
switch (myValue) {
    case “oneValue”:
        // do something
        break;
    case “otherValue”:
        // do something else
        break;
}
Davide Vitali
  • 1,017
  • 8
  • 24
-1

HTML

<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" rel="stylesheet" />
<button id="but1" class="btn btn-outline-info" onclick="onefunction();">Today</button>
<button id="but2" class="btn btn-outline-info" onclick="onefunction();">Yesterday</button>
<button id="but3" class="btn btn-outline-info" onclick="onefunction();">WTD</button>
<button id="but4" class="btn btn-outline-info" onclick="onefunction();">MTD</button>
<button id="but5" class="btn btn-outline-info" onclick="onefunction();">Last 7 Days</button>
<button id="but6" class="btn btn-outline-info" onclick="onefunction()">Last 30 Days</button>

JS

function onefunction() {
  if($(this).attr("id") == "but1"){
    alert('button1');
  }
  else if($(this).attr("id") == "but2"){
    alert('button2');
  }
  ...
}


Amogh Hegde
  • 392
  • 3
  • 10