検索

ホームページ  >  に質問  >  本文

javascript - 怎么样动态传入函数(计算函数)

1

2

3

4

5

6

7

8

9

10

11

12

13

<code>function compute(obj) {

    var a = $("li").eq(0).text();

    var b = $("li").eq(1).text();

    var c = $("li").eq(2).text();

    $("obj.el").html(

    obj.reult(a,b,c)

    )

};

compute ({

    el : "body",

    resule: function(a,b,c){reutrn a-b-c}

})

</code>

大概是这样的,需要每次传入不同的计算换算,页面的不通的结果,abc的参数是可变的,a-b-c的计算公式也是可变的。

我想要的效果是这样
compute({el: "#p1",resulte: function(a,b){return a+b}})在p1里面得到一个计算公式的值
compute({el: "#p2",resulte: function(a,b,c,d){return a*b/c+d}})在p2里面得到一个计算公式的值,

PHPzPHPz2894日前437

全員に返信(2)返信します

  • 阿神

    阿神2017-04-10 14:25:28

    1

    2

    3

    4

    5

    6

    7

    8

    <code class="lang-html"><ul id="arguments">

        <li>1</li>

        <li>2</li>

        <li>3</li>

        <li>4</li>

    </ul>

    <h1 id="result"></h1>

    </code>

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    <code class="lang-javascript">function compute(params){

        var resultBox=params.resultBox,

            calculate=params.calculate,

            arguments=document.querySelectorAll('#arguments li'),

            resultBox=document.querySelector(resultBox),

            args=[];

     

        for(var i in arguments){

            var arg=arguments[i];

            args.push(Number(arg.innerText));

        }

     

        var result=calculate.apply(this,args);

        resultBox.innerText=result;

    }

     

    compute({

        resultBox:'#result',

        calculate:function(a,b,c){

            return a+b+c

        }

    })

     

    </code>

    http://jsfiddle.net/windwhinny/X6Rtv/1/

    返事
    0
  • 黄舟

    黄舟2017-04-10 14:25:28

    你的意思是参数不定,不然你原来的脚本不是已经达到目的了?

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    <code class="lang-js">function compute(obj) {

        var a = [], i = 0, $li = $('li');

        for(;i < $li.length;i++){

            a[i] = $li.eq(0).text();

        }

        $(obj.el).html(

        obj.result(a)

        )

    };

    compute ({

        el : "#p1",

        result: function(arr){reutrn arr[0]+arr[1]}

    });

    compute ({

        el : "#p2",

        result: function(arr){return arr[0]*arr[1]/arr[2]+arr[3]}

    });

    </code>

    返事
    0
  • キャンセル返事