Передать значение в функцию размытия, используя нокаут

У меня есть 2 поля ввода, и оба будут вызывать одну и ту же функцию в случае размытия, как показано ниже

 <td>
                <input id="txtDate1" data-bind="value:Date1, event: { blur: ValidateData }"  />

            </td>
            <td>
                <input id="txtDate2" data-bind="value: Date2, event: { blur: ValidateData }" />
            </td>

На мой взгляд модель я создал функцию validateData

 this.ValidateDate = function () {

        var txtData = $('#txtDate1').val();

        if (!valid_date(txtData )) {

               alert("Date not valid");
                $(this).focus();

 };

Для этой функции я хочу передать фактическое значение текстового поля на потерянном фокусе. Моя проблема в том, что я не знаю, какое значение передать этой функции.

Как я могу этого достичь?

2 ответа

Решение

Это очень легко сделать так

data-bind="value:Date1, event: { blur: ValidateData.bind($data,Date1) }"

И ваша функция

this.ValidateDate = function (myval) {
    // your code
};

Если вы добавите параметр, нокаут пройдет current model value наблюдаемым. В вашем случае это пройдет parent из Date1 а также Date2, Вы можете использовать следующие для дифференциации Date1 от Date2:

<input id="txtDate1" data-bind="value:Date1, 
       event: { blur: 
                    function (data, event) { 
                        ValidateDate('Date1', data, event) 
                    } 
              }"  />

this.ValidateDate = function (whichDate, data, event) {

    if (!valid_date(ko.utils.unwrapObservable(data[whichDate]))) {
           alert("Date not valid");
            $(this).focus();
};

Смотрите документацию:

При вызове вашего обработчика Knockout предоставит текущее значение модели в качестве первого параметра.

Другие вопросы по тегам