0

我已将 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 函数例如:

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

但这无济于事...

4

4 回答 4

0

Not the finest way but did you try

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

And did you check, if any other script blocks or uses theese events?

于 2014-06-27T12:54:19.677 回答
0

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

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

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

 var old_foo = foo;
     foo = function() {
      old_foo();
     bar();
  }
于 2014-06-27T13:33:10.197 回答
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])
      }
    }
  }
};
于 2014-06-28T00:00:26.453 回答
0

它在 chrome 版本 35.0.1916.153 m 上运行良好。

附言。删除了 onchange="SomeBCfunction(a,b,c);" 因此每次更改所选项目时浏览器都不会出现错误,但即使使用 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>
于 2014-06-27T12:43:05.853 回答