有没有办法调用JavaScript函数,通过脚本调用窗体外的元素

时间:2011-05-10 17:18:24

标签: javascript-events

我试图在表单上选择一个值时调用一个简单的函数。问题是我无法访问我可以直接在字段上设置功能的代码。

如果我有权访问,我只需直接在元素内写入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 = Quantity1 + Quantity2;     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 :(得分:0)

您感兴趣的元素是否设置了ID或名称字段。我昨天为我网站上的表格解决了这个问题。您可以使用jquery轻松完成此任务。

添加以下内容:

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

将id_cities_0替换为您可以通过查看来源找到的元素的ID。确保id不会改变。

如果元素没有id,请回写。

答案 1 :(得分:0)

如果没有其他库依赖,这很容易做到。首先是你的问题......

:我可以进行两次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>