JQuery - выполнение функции путем добавления класса? - PullRequest
1 голос
/ 09 декабря 2011

В моем приложении MVC 2 у меня много представлений с множеством полей ввода. Многие из них содержат переменные DateTime.

Я использую плагин datepicker jQuery, чтобы помочь пользователю выбрать дату. Это также позволяет мне делать следующее в моей MasterPage:

$(document).delegate(".hasDatepicker", "keyup", function () {
            this.value = this.value.replace(/[^0-9\.\/]/g, '');
});

Это исключает использование пользователями неправильных символов, если они предпочитают печатать. Поскольку Datepicker добавляет свой собственный класс к элементам datepicker, я смог не использовать этот класс для автоматической очистки ввода. Никаких проблем здесь, это та часть, которая работает так, как должна.

Проблема, однако, заключается в том, что при открытии представления «Редактирование» текстовое поле заполняется «21/05/2012 0:00:00». Как только вы начинаете использовать плагин Datepicker, он меняется только на дату, как и должно быть. Чтобы удалить Time-part из текстового поля, я думал о том, чтобы сделать:

$(".hasDatepicker").each( function() {
     $(this).val($this.val().replace(" 0:00:00",""));
});

Что кажется мне самым простым решением.

Но тогда мне нужно было бы добавить его на каждую страницу, и мне было интересно, есть ли способ сделать версию .delegate () этой. Что-то вроде

$(document).delegate(".hasDatepicker", SOME_EVENT, function () {
            $(this).val($this.val().replace(" 0:00:00",""));
});

Проблема в том, каким должен быть SOME_EVENT? Я хочу, чтобы это срабатывало, когда был добавлен класс hasDatepicker, так что я знаю, какие текстовые поля нужно очистить (есть другие текстовые поля для замечаний и т. Д., Которые также содержат эту строку, но их следует заменить , а не .

Есть ли такое событие, которое вызывает изменение класса? Или любой другой способ решить эту проблему без необходимости копировать и вставлять его на каждую страницу? :)

Ответы [ 2 ]

1 голос
/ 09 декабря 2011

Почему вы используете этот сложный способ для редактирования формата даты, когда jQuery datepicker имеет встроенную функциональность, делая это с помощью опции dateFormat:

для документов jquery ui:

Формат проанализированных и отображаемых дат.Этот атрибут является одним из атрибутов регионализации.Полный список возможных форматов см. В функции formatDate.

Примеры кода

Initialize a datepicker with the dateFormat option specified.
$( ".selector" ).datepicker({ dateFormat: 'yy-mm-dd' });
Get or set the dateFormat option, after init.
//getter
var dateFormat = $( ".selector" ).datepicker( "option", "dateFormat" );
//setter
$( ".selector" ).datepicker( "option", "dateFormat", 'yy-mm-dd' );
0 голосов
/ 09 декабря 2011

Я бы предложил вам использовать форматирование на сервере, чтобы временная часть не заполнялась в текстовом поле. Как: new DateTime().ToShortDateString() или путем создания специального формата для этого.

Вы можете просто использовать EditorFor, как описано здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...