関数を動的に呼び出すには、オブジェクトのプロパティに関数を代入します。
以下は、変更した 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>
コメント