JQuery onchange在jsfiddle中多次运行,但在浏览器中只运行一次

时间:2014-06-27 12:33:04

标签: javascript jquery css business-catalyst

我已将jquery(1.11.1)脚本添加到业务催化剂站点购物车页面,以隐藏或显示消息,具体取决于用户点击的下拉列表。它在jsfiddle http://jsfiddle.net/NathanHill/462tk/中多次运行,但在浏览器中只运行一次。下拉后,javascript目前处于排队状态。

我无法控制html下拉列表,因此我无法在html onchange中插入任何函数。

HTML:

<select onchange="SomeBCfunction(a,b,c);" id="shippingCountry">
    <option value="AF">AFGHANISTAN</option>
    <option value="AX">ALAND ISLANDS</option>
    <option value="GB" selected="selected">UNITED KINGDOM</option>
</select>

<div id="zones">Show message</div>

使用Javascript:

<script type="text/javascript">
    $(document).ready(function(){
        $('#shippingCountry').on('change', function() {
            if ( this.value == 'GB')
            {
                $("#zones").show();
            }
            else
            {
                $("#zones").hide();
            }
        });
    });
</script>

任何帮助都将不胜感激。

我尝试添加/附加到触发的现有BC函数Eg:

var SomeBCfunction = oldBCfunction 
Function SomeBCfunction (){ 
//my hide-display code 
oldBCfunction; 
} 

但无处可去......

4 个答案:

答案 0 :(得分:0)

它适用于chrome版本35.0.1916.153 m。

聚苯乙烯。删除了onchange =&#34; SomeBCfunction(a,b,c);&#34;因此,每次更改所选项目时,浏览器都会出现错误并且错误,但即使使用onchange也可以多次,如果未使用,则应删除它。

<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
</head>
<div class='required'>
    <select id="shippingCountry"> 
        <option value="AF">AFGHANISTAN</option>
        <option value="AX">ALAND ISLANDS</option>
        <option value="GB" selected="selected">UNITED KINGDOM</option>   
    </select>
    <div id="zones">Show message</div>
</div>
<script type='text/javascript'>
 $(document).ready(function(){ 
     $('#shippingCountry').on('change', function() {
      if ( this.value == 'GB')
      {
        $("#zones").show();
      }
      else
      {
        $("#zones").hide();
      }
    });
  });
</script>

答案 1 :(得分:0)

不是最好的方法,但你试过

$('#shippingCountry').on('click', function() {

你是否检查过,如果有其他脚本阻止或使用了这些事件?

答案 2 :(得分:0)

您是否尝试仅创建BC写入HTML的函数?

 function SomeBCfunction() {
     if $('#shippingCountry').val() == "GB" {
       $("#zones").show();
        }
        else
        {
            $("#zones").hide();
        }
      }
  }

也许您可以使用新功能覆盖旧功能并包含您需要的操作:

 var old_foo = foo;
     foo = function() {
      old_foo();
     bar();
  }

答案 3 :(得分:0)

每次更改时,BC都会丢弃#catCartDetails的全部内容,包括您附加的所有事件处理程序。

您可以通过重新定义最初在window.UpdateShipping()中定义的函数/CatalystScripts/Java_OnlineShopping.js来阻止或挂钩。

在您的情况下,创建一个在ApplyDiscountCode()之后调用的函数应该允许您根据#zones的值显示jQuery('#shippingCountry').find(":selected").text()

window.UpdateShipping = function(e, t, n) {
  var r = document.getElementById("catCartDetails");
  if (r) {
    var i = CMS.OrderRetrievev2.ServerSideUpdateShipping(t, e, n);
    if (i.value[0]) {
      r.innerHTML = i.value[2];

      // Your logic here:
      checkShippingCountry();
    }
    if (i.value[1].length > 0) {
      if (/(iP[ao]d|iPhone).*?Safari/.test(navigator.userAgent)) {
        setTimeout(function() {
          alert(i.value[1])
        }, 0)
      } else {
        alert(i.value[1])
      }
    }
  }
};