Вызовите событие Javascript onchange, программно изменив значение текстового поля - PullRequest
11 голосов
/ 09 апреля 2009

проблема, с которой я сталкиваюсь, такова:

  • У меня есть текстовое поле для диапазона дат рядом с элементом управления календаря.
  • Когда пользователь выбирает дату из календаря, он заполняет эту дату в текстовом поле
  • Когда это происходит, я хочу запустить функцию javascript, однако событие onchange, похоже, не происходит.

В идеале я бы хотел иметь возможность добавить событие в качестве атрибута в текстовое поле, например:

txtCreateDate.Attributes.Add("onchange", string.Format("JSfunction({0},'{1}');", arg1, arg2));

больше информации: Дата вводится в текстовое поле в c #. Элемент управления календаря имеет обработчик событий на странице. Когда дата выбрана, обработчик событий помещает ее в текстовое поле. На этом этапе я попытался установить фокус на текстовом поле, а затем поместить в него атрибут onBlur, но текстовое поле, кажется, никогда не получает фокус.

Я полагаю, что в этот момент я мог бы напрямую вызвать функцию javascript, выполняя ClientScript.RegisterClientScriptBlock или что-то в этом роде, но это кажется неаккуратным и никогда не работает так, как я хочу.

Ответы [ 8 ]

19 голосов
/ 02 сентября 2010

Это старый вопрос, и я не уверен, поможет ли он, но мне удалось программно запустить событие, используя:

if (document.createEvent && ctrl.dispatchEvent) {
    var evt = document.createEvent("HTMLEvents");
    evt.initEvent("change", true, true);
    ctrl.dispatchEvent(evt); // for DOM-compliant browsers
} else if (ctrl.fireEvent) {
    ctrl.fireEvent("onchange"); // for IE
}
8 голосов
/ 09 апреля 2009

Вы можете запустить событие просто с помощью

document.getElementById("elementID").onchange();

Я не знаю, работает ли это на некоторых браузерах, но должно работать на FF 3 и IE 7 +

8 голосов
/ 09 апреля 2009

Вы неверно истолковываете, что делает событие onchange при применении к текстовой области. Он не сработает, пока не потеряет фокус или вы не нажмете Enter. Почему бы не запустить функцию из onchange для выбора, который заполняет текстовую область?

Проверьте здесь больше о событии onchange: w3schools

2 голосов
/ 09 апреля 2009

Onchange срабатывает только тогда, когда пользователь вводит что-то с клавиатуры. возможный обходной путь может заключаться в том, чтобы сначала сосредоточить текстовое поле, а затем изменить его.

Но почему бы не получить событие, когда пользователь нажимает на дату? Там уже должен быть какой-то JavaScript.

1 голос
/ 02 сентября 2010

Вы можете попробовать Библиотека Гимна .

1 голос
/ 10 апреля 2009

Ваше население со стороны сервера. Использование registerclientscript поместит скрипт в начало формы. Вы захотите использовать RegisterStartupScript (Block), чтобы поместить скрипт в конец рассматриваемой страницы.

Первый пытается запустить сценарий до того, как в dom существует текстовая область, второй запускает сценарий после создания этого элемента на странице.

0 голосов
/ 22 августа 2014

Вы можете поместить его в другой класс, а затем вызвать функцию. Это работает, когда обновление ajax

$(document).on("change", ".inputQty", function(e) {

//Call a function(input,input);
});
0 голосов
/ 09 апреля 2009

«onchange» срабатывает только тогда, когда атрибут программно изменяется или когда пользователь вносит изменение, а затем фокусируется вдали от поля.

Вы смотрели на использование объекта календаря YUI? Я разработал решение, которое помещает календарь yui в панель yui и скрывает панель до щелчка по связанному изображению. Я могу видеть изменения от любого.

http://developer.yahoo.com/yui/examples/calendar/formtxt.html

...