関数を動的に呼び出すには、オブジェクトのプロパティに関数を代入します。
以下は、変更した input 要素によって、実行する関数を切り替える例。
- <html>
- <meta>
- <meta charset="UTF-8">
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
- </meta>
- <body>
- <form>
- <p>a <input type="number" name="a"></p>
- <p>b <input type="number" name="b"></p>
- <p>c <input type="number" name="c"></p>
- <p>d <input type="number" name="d"></p>
- </form>
- <p>a + b = <input type="text" name="ab" readonry></p>
- <p>b + c = <input type="text" name="bc" readonry></p>
- <p>c + d = <input type="text" name="cd" readonry></p>
- <p>a + d = <input type="text" name="ad" readonry></p>
- <script>
- $(function() {
- // オブジェクトのプロパティに関数を代入
- let funcObj = {
- // a の時に実行する関数
- a: function(inputData) {
- let ab = inputData['a'] + inputData['b']
- let ad = inputData['a'] + inputData['d']
- $('input[name=ab]').val(ab)
- $('input[name=ad]').val(ad)
- },
- // b の時に実行する関数
- b: function(inputData) {
- let ab = inputData['a'] + inputData['b']
- let bc = inputData['b'] + inputData['c']
- $('input[name=ab]').val(ab)
- $('input[name=bc]').val(bc)
- },
- // c の時に実行する関数
- c: function(inputData) {
- let bc = inputData['b'] + inputData['c']
- let cd = inputData['c'] + inputData['d']
- $('input[name=bc]').val(bc)
- $('input[name=cd]').val(cd)
- },
- // d の時に実行する関数
- d: function(inputData) {
- let cd = inputData['c'] + inputData['d']
- let ad = inputData['a'] + inputData['d']
- $('input[name=cd]').val(cd)
- $('input[name=ad]').val(ad)
- },
- }
- $('input[type=number]').on('change', function(){
- let change_name = $(this).attr('name')
- let inputData = {}
- $('input[type=number]').each(function(i){
- let val = $(this).val()
- if (val == '') {
- val = 0
- }
- let name = $(this).attr('name')
- inputData[name] = val|0 // 数値に型変換
- })
- // 変更した input 要素の name に対応した関数を実行する
- if (funcObj[change_name] != null) {
- funcObj[change_name](inputData)
- }
- })
- })
- </script>
- </body>
- </html>
コメント