【问题标题】:Trying to use jQuery, Clone and multiplication function尝试使用 jQuery、克隆和乘法函数
【发布时间】:2012-12-03 11:42:47
【问题描述】:

我在启用 jQuery AutoComplete 和 Clone 功能时遇到问题,希望有人能帮助我。抱歉,如果这有点过于详细了!

我有一张表格,里面有标题、描述、数量、价格和总计。用户可以在产品字段上使用自动完成功能来获取标题的描述和价格。同时,我有一个使用克隆的“添加行”函数,如果其中一个发生更改,我正在尝试使用另一个函数来乘以数量和价格。到目前为止,我有以下内容:

向表中添加新行的代码:

var $table;
$(function() {
     $table=$('#invoiceitems'); 
     var $existRow=$table.find('tr').eq(1);
      bindAutoComplete($existRow);
});

function addRow(){
    var $row=$table.find('tr:last').clone();
    var $input=$row.find('input:first');
    $row.find('input').val("");
    $row.find('#product_description').val("");
    $table.append($row);
    bindAutoComplete($row);
    $input.focus();
}

自动完成代码:

function bindAutoComplete($row){
    $row.find(".product_title").autocomplete(products, {
        width: 380,
        matchContains: "word",
        formatItem: function(row) {
            return row.title;
        }
    });
    $row.find('.product_title').result(function(event, data) {
        $row.closest('.product_description').val(data.description);
        $row.find('.product_price').val(data.price);
        $row.find('.qty').val("1");
    });
}

价格与数量相乘的代码:

$(document).ready(function() {    
$(".qty, .product_price").keyup(function() {
   var $row = $(this).closest("tr"),
       price = $row.find(".product_price").val();
           qty = $row.find(".qty").val();
    $row.find(".line_total").text(qty * price);
});

目前,自动完成和克隆工作正常,但数量和价格的乘法仅适用于第一行,现在适用于添加的任何新行。如果我替换 clone();与克隆(真);然后乘法可以工作,但是 AutoComplete 无法正常工作,因为它会在您使用它时更新所有先前行的价格。

我不太擅长 JS 和 jQuery,所以我希望这是一个简单的错误来纠正?

非常感谢!

【问题讨论】:

    标签: jquery autocomplete clone


    【解决方案1】:

    问题是clone(true)意味着数据和事件也会被克隆。

    我建议使用clone() 方法并像这样进行活动

    适用于 jQuery 1.7 及更高版本。

    $(document).ready(function() {    
       $('table#invoiceitems').on('keyup', ".qty, .product_price", function() {
           var $row = $(this).closest("tr"),
           price = $row.find(".product_price").val();
           qty = $row.find(".qty").val();
           $row.find(".line_total").text(qty * price);
       }
    });
    

    对于旧版本,您可以使用live()

    将为稍后将添加到表中的每个新行调用此方法。

    【讨论】:

    • 谢谢塔尔哈。我稍后会尝试你的解决方案,让你知道它是怎么回事。 :)
    • 嗨,塔尔哈。非常感谢您的帮助 - 您的解决方案完美运行! :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 2019-10-19
    • 2014-02-21
    • 2017-09-21
    • 1970-01-01
    相关资源
    最近更新 更多