Вызовите событие Javascript onchange, программно изменив значение текстового поля

проблема, с которой я сталкиваюсь, заключается в следующем:

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

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

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

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

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

Ответ 1

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

Здесь вы можете узнать больше о событии onchange: w3schools

Ответ 2

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

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
}

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 7

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

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

//Call a function(input,input);
});

Ответ 8

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

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

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