创建通用Javascript / Jquery ajax函数

时间:2012-10-20 19:14:43

标签: javascript jquery ajax

我是javascript,jquery和ajax的新手,需要帮助提高我的代码效率。我有以下javascript / jquery函数可以正常工作:

 <script type="text/javascript">
    $(document).ready(function()
    {
        $("#promo1").change(function() //select menu id that triggers script on change
        {
           //data here

            $.ajax
            ({
               //ajax stuff here
                {
                    //individual values from json array


                    //set each value textbook value
                    $("#discprice1").val(disc);
                    $("#itemprice1").val(total);
                    $("#tax").val(tax);
                    $("#grandtotal").val(grand);
                }
            });

        });

    });
    </script>

我在建议后将原来的功能更改为:

 <script type="text/javascript">
    $(document).ready(function()
    {
        var setupCalculation = function(index) {

            $("#promo" + index).on("change", function() //select menu id that triggers script on change
            {
 //rest of the function is here....

并将我的选择更改为:

   <select name="promo<?php echo $i; ?>" id="promo<?php echo $i; ?>" 
onchange="setupCalculation('<?php echo $i; ?>');">

但是,它不起作用。我错过了什么?

但是,我需要对10个不同的计算行进行10次相同的操作。我怎样才能做到这一点,我可以一般性地使用这个功能,只需传递&#34; id&#34;对于该函数的选择框,并且对于每个选择器不重复该代码10次,例如, #promo1,#promo2,#promo3等......

我假设我需要在这里添加onchange =&#34; javascript函数();&#34;对于HTML代码,但我无法使用它。

谢谢!

4 个答案:

答案 0 :(得分:2)

这是你应该写一个小插件的情况。看一下它的外观(我没有得到你需要的东西,但你会理解这个想法):

$.fn.myFirstPlugin = functin() {
    return this.each(function() {
        // This is currect select box  
        var $select = $(this);

        // Change event
        $select.change(function() {
            // Do something for this select box; $(this) will point to current select element
            $.ajax({ ... })
        });
    })
};

然后你会像:

一样使用它
$('#promo1, #promo2, #promo3').myFirstPlugin();

答案 1 :(得分:1)

我不会使用内联的“onchange”属性,而是使用当前的方法来连接事件处理程序。这样你就可以定义一个函数setupCalculation,它连接给定选择列表的逻辑。

$(document).ready(function() {

    var setupCalculation = function(id) {
        $("#" + id).on("change", function() {
            // ajax/calculation logic
        });
    }

    setupCalculation("promo1");
    setupCalculation("promo2");
    // ...etc
});

如果结果元素不同(例如discprice2,discprice3等),那么最好将索引传递给函数,并对id的名称部分进行硬编码:

var setupCalculation = function(index) {
    $("#promo" + index).on("change", function() {

        // ajax stuff 
        $("#discprice" + index).val(disc);
        // etc
    });
}

修改使用表单onchange=setupCalculation(),该函数应如下所示(无需连接更改事件):

$(document).ready(function()
{
    window.setupCalculation = function(index) {
       //rest of the function is here....

答案 2 :(得分:0)

听起来像您的选择框看起来像

<select id="promo1">...</select>
<select id="promo2">...</select>

为每个人添加一个

<select id="promo1" class="promo">...</select>
<select id="promo2" class="promo">...</select>

这样您就可以使用一个简单的选择器为change事件函数选择所有框:

$(".promo").change(function() {
    ...
});

答案 3 :(得分:0)

您可以设置jQuery函数并从所选对象中调用它:

$.fn.changePromo = function() {
    /* return this jQuery object to allow chaining and execute in an 'each()' to allow multiple elements */
    return this.each( function() {
        $( this ).change( function() {
            /* your ajax call here */
        } );
    } );
}

/* call examples */
$( '#promo1' ).changePromo();
$( '#promo1,#promo2' ).changePromo();