如果模态关闭,如何在textarea中重置我的maxlength?

时间:2016-02-19 10:34:08

标签: razor knockout.js asp.net-mvc-5

如果我关闭模态,如何重置textarea maxlength。

如果我关闭模态但我的maxlength验证没有重置,我已经清理了我的textarea。

<div class="modal fade" id="Cancel" tabindex="-1" role="dialog" aria-labelledby="Cancel-label" aria-hidden="true">
<div class="modal-dialog" style="top: 100px; width: 325px;">
    <div class="modal-content">
        <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
            <h4 class="modal-title" id="Cancel-label">Reason for Disapproval</h4>
        </div>
        <div class="modal-body">
            <p>Reason for disapproval of the item(s). [Required]</p>
            @Html.TextArea("Remarks", new { 
                                           @placeholder= "100 characters left.",
                                           @required=true,
                                           @style="height:120px; width: 750px;",
                                           @data_bind = "textInput: message.view"
                                         })
            <br>
            <span data-bind="text: charLeft"></span> characters left.
        </div>
        <div class="modal-footer">
            <button type="submit" name="command" value="Cancel" class="btn btn-primary col-sm-3 pull-left">OK</button>
            <button type="button" class="btn btn-default col-sm-3 pull-left" data-dismiss="modal">Close</button>
        </div>
    </div>
</div>

我有这个敲除maxout

的knockoutjs
        ko.extenders.maxlength = function (target, maxlength) {
            var view = ko.dependentObservable({
                read: target,
                write: function (value) {
                    if (value.length <= maxlength) {
                        target(value);
                    } else {
                        view.notifySubscribers(target());
                    }
                }
            });
            target.view = view;
            target.maxlength = maxlength;
            return target;
        };

        function ViewModel() {
            this.message = ko.observable('').extend({ maxlength: 100 });
            this.charLeft = ko.pureComputed(function () {
                return this.message.maxlength - this.message().length;
            }, this);
        }

        ko.applyBindings(new ViewModel());

为了清理我的textarea,我有这个jquery

        $('#Cancel').on('hidden.bs.modal', function (e) {
            $(this)
              .find("input,textarea,select")
                 .val('')
                 .end()
              .find("input[type=checkbox], input[type=radio]")
                 .prop("checked", "")
                 .end();
        })

有人可以帮助我。

2 个答案:

答案 0 :(得分:1)

每当你编写DOM操作代码时,问问自己为什么你在viewmodel中没有这样做。也许您需要一个自定义绑定处理程序也许你只需要绑定更多的元素。也许你只需要处理你绑定的元素。

你正在倒退:你应该使用message.view来清除textArea,而不是写入textArea以期清除message.view

答案 1 :(得分:1)

使用当前使用.input-group .form-control { border-left: 0; border-right: 0; } .input-group-addon { background: #fff; } 事件的解决方案(如果自定义绑定无法处理,则会很糟糕),您可以通过清除hidden.bs.modal来实现。

首先,您需要分配message个实例,例如:

ViewModel

然后在var vm = new ViewModel(); 事件中使用它,例如:

hidden.bs.modal

检查工作小提琴here

但是这不是解决淘汰赛的好方法。如果您不想使用自定义绑定,则只需使用$('#Cancel').on('hidden.bs.modal', function(e) { vm.message(""); }); 绑定即可清除click

像: 在ViewModel中添加:

message

修改你的html绑定:

this.clearMessage = function(){
   this.message("");
};

小提琴here