Как программно изменить выбор, чтобы он запускал поведение onchange? - PullRequest
6 голосов
/ 04 августа 2009

Это не похоже на работу:

<select id="mySel" onchange="alert('foo')">
    <option value="a">a</option>
    <option value="b">b</option>
</select>

<script>
dojo.byId('mySel').value = 'b'; // select changes, but nothing is alerted
</script>

(я использую додзё, но это не имеет значения.)

Ответы [ 6 ]

6 голосов
/ 04 августа 2009

Имя 'onchange' немного вводит в заблуждение, если вы не понимаете, что событие изменения и изменяемое значение - это не одно и то же. Событие изменения происходит, когда пользователь изменяет значение в браузере. Я полагаю, что вы можете запустить событие вручную, вызвав dojo.byId('mySel').onchange() после программного изменения значения. (Однако, возможно, вам потребуется определить функцию, которая вызывает alert. Я сам этого не делал.)

3 голосов
/ 04 августа 2009

Это изменит значение, но не вызовет событие onchange. Каждый раз, когда вы изменяете элемент с помощью JavaScript, он не будет запускать событие (мешает вам столкнуться с проблемами рекурсии *).

Если вы настроите обработчик событий, например, так.

function myHandler(){
  //do whatever stuff here
  changeColor( dojo.byId('mySel') );
}

, затем вы можете вызвать это отдельно, после того, как вы установите значение программно.

Примечание (*): я не эксперт по додзё ... поэтому я предполагаю, что они не "добавили" автоматический вызов обработчиков событий, когда вы устанавливаете значение из JavaScript.

2 голосов
/ 04 августа 2009

Вы можете взглянуть на эти вопросы и ответы на них: они могут помочь:

1 голос
/ 15 августа 2015

Для тех, кто хочет вызвать событие change, используя javascript.

        var evObj = document.createEvent("HTMLEvents");
        evObj.initEvent("change", true, true);
        var elem = document.getElementById('some-id');
        elem.dispatchEvent(evObj);
1 голос
/ 08 сентября 2009

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

Он обнаруживает изменения 'selectedIndex' и 'value' - просто тестовый случай 'propertyName'

<select id="mySel" onpropertychange="dothis(event);">
    <option value="a">a</option>    
    <option value="b">b</option>
</select>

function dothis(event)
{

    if (event.propertyName == "selectedIndex")
            alert('selection changed');
}

с моей головы ... (в настоящее время используется asp.net js framework, который совсем не похож)

0 голосов
/ 04 августа 2009

Попробуйте вместо этого назначить selectedIndex.

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