代码之家  ›  专栏  ›  技术社区  ›  B. Clay Shannon-B. Crow Raven

为什么我的变更处理程序从未被解雇?

  •  0
  • B. Clay Shannon-B. Crow Raven  · 技术社区  · 11 年前

    我得到了这个jQuery,来自Gregor Primar发布的内容 here :

    /*每当框GrandTotal发生变化时(当在任何“amount”输入文本元素中输入任何金额时),如果总计之间存在差异,则禁用保存按钮*/

    $(document).on("change", '[id$=boxGrandTotal]', function () {
        //var savebutton = $("[id$=btnSave]");
        alert('entered the change handler for boxGrandTotal');
        var savebutton = document.getElementById('[id$=btnSave]');
        var payment = parseFloat(document.getElementById('[id$=boxPaymentAmount]').value).toFixed(2);
        var total = parseFloat(document.getElementById('[id$=boxGrandTotal]').value).toFixed(2);
        if (payment == null) payment = 0;
        if (total == null) total = 0;
        if (payment == total) {
            savebutton.attr("disabled", false);
            return true;
        } else {
            alert('Total and Payment Total do not match. Please enter the same amount for both values and try again!');
            savebutton.attr("disabled", true);
            return false;
        }
    });
    

    这会在任何时候触发boxGrandTotal更新,对吗?的确,它正在更新,但我从未看到“为boxGrandTotal输入了更改处理程序”

    在那里 ID以“boxGrandTotal”结尾的TextBox/text输入元素;下面是如何在代码中创建它的:

    boxGrandTotal = new TextBox()
    {
        CssClass = "dplatypus-webform-field-input",
        ID = "boxGrandTotal"
    };
    

    那么,当boxGrandTotal中的值 改变?是否仅在值为 手动 改变?如果是,解决方法是什么?

    更新

    根据卡尔坎巴图汉的建议,将我的代码改为:

    boxGrandTotal = new TextBox()
    {
        CssClass = "dplatypus-webform-field-input",
        ID = "boxGrandTotal",
        ClientIDMode = System.Web.UI.ClientIDMode.Static
    };
    

    …发出两个编译器错误,具体而言:

    'System.Web.UI.WebControls。TextBox“不包含”ClientIDMode“的定义

    -以及:

    命名空间“System.Web”中不存在类型或命名空间名称“ClientIDMode”。UI”(是否缺少程序集引用?)

    更新2

    顺便说一下,这是如何更改框GrandTotal中的值的:

    $(document).on("blur", '.amountbox', function (e) {
        var amount1 = $('[id$=boxAmount1]').val() != '' ? parseFloat($('[id$=boxAmount1]').val()) : 0;
        var amount2 = $('[id$=boxAmount2]').val() != '' ? parseFloat($('[id$=boxAmount2]').val()) : 0;
        var amount3 = $('[id$=boxAmount3]').val() != '' ? parseFloat($('[id$=boxAmount3]').val()) : 0;
        var amount4 = $('[id$=boxAmount4]').val() != '' ? parseFloat($('[id$=boxAmount4]').val()) : 0;
        var amount5 = $('[id$=boxAmount5]').val() != '' ? parseFloat($('[id$=boxAmount5]').val()) : 0;
        var grandtotal = amount1 + amount2 + amount3 + amount4 + amount5;
        $('[id$=boxGrandTotal]').val(parseFloat(grandtotal).toFixed(2));
    });
    
    2 回复  |  直到 9 年前
        1
  •  1
  •   kalkanbatuhan    11 年前

    试试这个

    boxGrandTotal = new TextBox()
            {
                CssClass = "dplatypus-webform-field-input",
                ID = "boxGrandTotal",
                ClientIDMode =System.Web.UI.ClientIDMode.Static
            };
    
        2
  •  0
  •   B. Clay Shannon-B. Crow Raven    11 年前

    解决方案是在分配值的代码中添加一个“.ctrigger(“change”)”,这样就不必这样了:

    $('[id$=boxGrandTotal]').val(parseFloat(grandtotal).toFixed(2));
    

    …是这样的:

    $('[id$=boxGrandTotal]').val(parseFloat(grandtotal).toFixed(2)).trigger("change");
    

    更详细地说,当值更改时,必须显式触发更改事件(请注意附加的“.trigger()”jazz):

    $(document).on("blur", '.amountbox', function (e) {
        var amount1 = $('[id$=boxAmount1]').val() != '' ? parseFloat($('[id$=boxAmount1]').val()) : 0;
        . . .
        var grandtotal = amount1 + amount2 + amount3 + amount4 + amount5;
        $('[id$=boxGrandTotal]').val(parseFloat(grandtotal).toFixed(2)).trigger("change");
    });
    

    …然后这段代码运行得很好:

    /* Whenever boxGrandTotal changes (which it does when any amount is entered in any of the "amount" input text elements), disable the save button if there is a discrepancy between the totals */
    $(document).on("change", '[id$=boxGrandTotal]', function () {
        var savebutton = document.getElementById('[id$=btnSave]');
        var payment = $('[id$=boxPaymentAmount]').val() != '' ? parseFloat($('[id$=boxPaymentAmount]').val()) : 0;
        var total = $('[id$=boxGrandTotal]').val() != '' ? parseFloat($('[id$=boxGrandTotal]').val()) : 0;
        if (payment == null) payment = 0;
        if (total == null) total = 0;
        if (payment == total) {
            savebutton.attr("disabled", false);
            return true;
        } else {
            alert('Total and Payment Total do not match. Please enter the same amount for both values and try again!');
            //savebutton.attr("disabled", true);
            savebutton.prop("disabled", true);
            return false;
        }
    });
    

    我说“ 很好 “而不是” 令人惊叹的辉煌 “,因为未禁用保存按钮。