Есть ли способ вызвать функцию JavaScript, вызывая элемент вне формы через скрипт - PullRequest
0 голосов
/ 10 мая 2011

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

Если бы у меня был доступ, я просто написал бы событие onChange непосредственно внутри элемента.Есть ли способ вызвать элемент внутри скрипта и применить к нему событие onChange?

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

function changeQty () {var productName = MainForm.elements ["ProductCode"]. Value;var Quantity1 = MainForm.elements ["SELECT ___" + productName + "___ 23"]. value;var Quantity2 = MainForm.elements ["SELECT ___" + productName + "___ 24"]. value;var QtyUpdated = Количество1 + Количество2;MainForm.elements ["QTY." + ProductName] .value = QtyUpdated;}

А вот элемент формы, где я хочу, чтобы функция запускалась.У меня есть доступ только к заголовку, куда можно вставить скрипт, но не к элементам на странице.Также у формы уже есть некоторый другой javascript.Могу ли я иметь два события onChange?

-12.00

-11.50 -11.00 -10.50 -10.00 -9.50 -9.00 -8.50 -8.00 -7.50

-7.00 -6.50 -6,00 -5,75 -5,50 -5,25 -5,00 -4,75 -4,50

-4,25 -4,00 -3,75 -3,50 -3,25 -3,00 -2,75 -2,50 -2,25

-2,00 -1,75 -1,50 -1,25 -1,00 -0,75 -0,50 +0,50 + 0,75

+ 1,00 +1,25 + 1,50 +1,75 +2,00 +2,25 +2,50 +2,75 + 3,00

+ 3,25 +3,50 +3,75 +4,00 +4,25 +4,50 +4,75 +5,00 + 5,25

+ 5,50 +5,75 +6,00

Ответы [ 2 ]

0 голосов
/ 10 мая 2011

Это довольно легко сделать без зависимости от других библиотек. Сначала ваши вопросы ...

Q : Могу ли я иметь два события onChange.
A : Да, если вы регистрируетесь с помощью addEventListener / attachEvent, смотрите quirksmode primer о событиях. Вы можете иметь> 1 любого вида события.

Чтобы прикрепить событие к чему-либо на странице после его загрузки:

if (window.addEventListener) {
    window.addEventListener('load',prep,false);
} else if (window.attachEvent) {
    window.attachEvent('onload',prep);
}

Где prep будет функцией, которая присоединяет вашу changeQty функцию к любым элементам, которые вам нужны на странице:

function prep() {
    /* Assuming your MainForm.elements process gets an element*/
    var el=MainForm.elements["SELECT___"+productName+"___23"];
    if (el.addEventListener) {
        el.addEventListener('change',changeQty,false);
    } else if (el.attachEvent) {
        el.attachEvent('onchange',changeQty);
    }
}

onload / load будет ожидать загрузки всего DOM, то есть сценариев / CSS / HTML и графики. Просто предупреждение - если загрузка страницы сложная, она может не сработать, как только страница отобразится. Если вы можете управлять контентом в конце HTML (до </html>), тогда вы можете обойти это с помощью следующего (вместо присоединения prep к load и определения функции prep):

<script>
(function() { 
    /* Assuming your MainForm.elements process gets an element*/
    var el=MainForm.elements["SELECT___"+productName+"___23"];
    if (el.addEventListener) {
        el.addEventListener('change',changeQty,false);
    } else if (el.attachEvent) {
        el.attachEvent('onchange',changeQty);
    }
}());
</script>
</body>
</html>
0 голосов
/ 10 мая 2011

Имеет ли интересующий вас элемент поле идентификатора или имени?Я решил эту проблему вчера для формы на моем сайте.Вы можете использовать JQuery для этого легко.

Добавьте следующее:

$(document).ready(function(){
  $("#id_cities_0").change(function(){
    //call your function here
  }); 
})

Замените id_cities_0 на id вашего элемента, который вы можете найти, просмотрев источник.Убедитесь, что идентификатор не меняется, хотя.

Если элемент не имеет идентификатора, напишите обратно.

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