1

我有一个 tablesorter 表,可以正确填写。我要做的是确保单元格的编辑量不超过原始值的 10%。例如,如果第一行第一个单元格中的价格字段(由 id #price 表示)设置为 6.00,下一行中的下一个金额为 5.00,我希望能够更改其中一个价格,或同时更改两者,但不超过 10%(例如 6 变为 6.60)。这是我到目前为止所拥有的:

$('#tally tr').live ('click', function(){
    var tempPrice =0;
    tempPrice = $(this).find('#price').val();
    // Which selects the correct row and price field and will store that value in tempPrice.
    $('#price').change(function(){
        var pnew =0;
        $('#tally tbody tr').each(function() {
            if ($('#price').val() > (tempPrice*1.1)){
                pnew = tempPrice*1.1;
                $('#price').val(pnew.toFixed(2));
                alert("Your cannot raise the price by more than 10%");
            }
        }); //end of tbody tr function
    }); // end of change function
}); // end of new price change function

更改价格并确保不超过 10%。这些功能可以更改第一个单元格,但是如果我要更改第二个单元格,我无法使价格更改功能起作用。另外,好像这还不够复杂,如果我先尝试更改第二个单元格,然后尝试第一个单元格,它会保留pnew第二个单元格的价格,然后将使用该数字更新表格(5 如上面的示例),然后它将使用正确的数字(6.60)更新单元格。

我如何让它按照我需要的方式工作?编辑:价格可以根据用户的需要降低,只是不会提高超过 10%。

4

1 回答 1

0

首先你应该有3个变量,一个存储价格,一个是上限(*1.1),一个是下限(*0.9)。

然后,您需要使用$('input').focus()获取原始值并$('input').blur()在用户完成后运行验证。

问题是当您有多个输入时,很难跟踪用户可以点击的临时价格值,因此您需要一个变量来跟踪最近的输入选择器,以便模糊可以验证这一点。

var $current_element;
var temp_price;
var l_price;
var h_price;

$('input').focus(function() {
    $current_element = $(this);
    temp_price = $(this).value();
});

$('input').blur(function() {
    var value = $current_element.value();
    h_price = value * 1.1;
    l_price = value * 0.9;
    // Do validation of prices here and then either alert() 
    // or set $current_element.value(temp_price)
    // If validation fails call $current_element.focus() to return the user there
});

否则请查看此选项:https ://stackoverflow.com/a/10393958/1160747

哦,正如其他人提到的那样...... ID 应该对一个元素是唯一的,对多个元素使用类!

于 2013-04-04T14:51:28.253 回答