【问题标题】:How capture textbox value on load ? Jquery with knockout如何在加载时捕获文本框值? Jquery 与淘汰赛
【发布时间】:2014-07-23 14:30:58
【问题描述】:

我需要捕获我的文本框值并将其存储在隐藏字段中。

在我第一次加载时,我从数据库中加载文本框中的值,并且我需要将相同的值放置在某种隐藏字段中,这使我的工作更轻松。

cshtml:

 <input type="hidden" id="sal3" />

 <input type="text" id="txtSalesPerson1" data-bind="value:$data.SalesPerson1"/>

这就是我尝试为隐藏字段分配值的方式,但我完成了按钮单击,在这种情况下我不需要。

 $('#sal3').val($('#txtSalesPerson1').val());

我正在寻找这个,因为在用户更改文本框值之前以及在他将值保存回数据库之前,我需要捕获文本框中的值,该值出现在我的初始加载中。

隐藏领域是最好的,但在飞行中我不知道如何接近。

虽然我可以让事情正常进行,但我需要使用 viewbag 等,这是一种简单但冗长的方法,我完全反对它。

因此,任何坚韧的人都会受到赞赏

干杯

【问题讨论】:

    标签: jquery html asp.net-mvc-4 knockout.js


    【解决方案1】:

    您可以将隐藏的输入绑定到像这样的 observable:

    viewmodel.SalesPerson1.InitialValue = ko.observable(null);
    viewmodel.SalesPerson1.subscribe(function (newValue) {
        if (viewmodel.SalesPerson1.InitialValue() == null)
            viewmodel.SalesPerson1.InitialValue(newValue);
    });
    
    <input type="hidden" id="sal3" 
           data-bind="value: $data.SalesPerson1.InitialValue" />
    
    <input type="text" id="txtSalesPerson1" data-bind="value:$data.SalesPerson1"/>
    

    如果你在几个地方都需要它,你甚至可以写一个扩展器:

    ko.extenders.initialValue = function (obs, options) {
        obs.InitialValue = ko.observable(null);
        obs.subscribe(function (newValue) {
            if (obs.InitialValue() == null)
                obs.InitialValue(newValue);
        });
    }
    
    viewmodel.SalesPerson1.extend({ initialValue: true });
    

    【讨论】:

    • 实际上我以更简单的方式做到了这一点。在我的 ajax get 方法中,我像这样存储,这在我的情况下非常有用:$('#sal3').val(data.SalesPerson1);。我的 html 看起来像 &lt;input type="hidden" id="sal3" /&gt; .. 干杯
    • 可能以其他方式在您的解决方案中添加代码。实际上,您的代码也可以正常工作,但希望有人能从我的方式和您的方式中受益。非常感谢
    • @supercool 我宁愿尽可能避免混合使用 jQuery 和淘汰赛。如果您发现它更适合您的需求,请随意添加您自己的答案并接受它:)
    • 不,你是对的。我觉得你的 cmets 是有道理的,如果我们混合会有什么问题吗?
    • @supercool 为什么要冒险? :) 在这种情况下可能不会,但你永远不知道你的代码会如何发展,也许将来会有
    【解决方案2】:

    只需将其放在您的视图中的document.ready 中,页面加载后它将在隐藏字段中设置文本框值。

    这样做:

    $(document).ready(function(){
    
    
    $('#sal3').val($('#txtSalesPerson1').val());
    
    })
    

    【讨论】:

    • 如果该值是通过敲除设置的,您可能会在写入之前读取它
    • Ehsan ty 回复,但在我的情况下它不起作用,因为第一个 document.ready 触发 asusal 稍后我的淘汰视图模型包含文本框值 fires 。所以通过上述方法,我无法将隐藏字段中的值提前存储到仍然文本框没有实际值的隐藏字段中。
    • 那么您绑定到文本框的方式也将其绑定到隐藏字段
    • 是的,问题已解决,伙计。 Ty 的帮助和您的时间。在我的淘汰赛中绑定到隐藏文件。现在很酷
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 2014-01-05
    • 2012-06-08
    相关资源
    最近更新 更多