当前位置:首页 > CMS教程 > ecshop > 列表

ecshop jquery冲突,美化商品属性选择 IE中js无法获得默认属性

发布:smiling 来源: PHP粉丝网  添加日期:2015-12-07 13:00:42 浏览: 评论:0 

本文我们来学习一下在ecshop中用jquery美化商品属性,jquery冲突如何解决,在IE中js无法获得默认属性应该如何解决.

ecshop 和 jquery 冲突,美化商品属性选择,拷贝一个transport.js  为 transport1.js,在需要用到的页面插入这个新js,隐藏 586行处开始:

  1. /* 
  2.  Object.prototype.toJSONString = function () { 
  3.  var a = ['{'], // The array holding the text fragments. 
  4.  b, // A boolean indicating that a comma is required. 
  5.  k, // The current key. 
  6.  v; // The current value. 
  7.  
  8. function p(s) { 
  9.  
  10. // p accumulates text fragment pairs in an array. It inserts a comma before all 
  11.  // except the first fragment pair. 
  12.  
  13. if (b) { 
  14.  a.push(','); 
  15.  } 
  16.  a.push(k.toJSONString(), ':', s); 
  17.  b = true; 
  18.  } 
  19.  
  20. // Iterate through all of the keys in the object, ignoring the proto chain. 
  21.  
  22. for (k in this) { 
  23.  if (this.hasOwnProperty(k)) { 
  24.  v = this[k]; 
  25.  switch (typeof v) { 
  26.  
  27. // Values without a JSON representation are ignored. 
  28.  
  29. case 'undefined': 
  30.  case 'function': 
  31.  case 'unknown': 
  32.  break; 
  33.  
  34. // Serialize a JavaScript object value. Ignore objects that lack the 
  35.  // toJSONString method. Due to a specification error in ECMAScript, 
  36.  // typeof null is 'object', so watch out for that case. 
  37.  
  38. case 'object': 
  39.  if (this !== window) 
  40.  { 
  41.  if (v) { 
  42.  if (typeof v.toJSONString === 'function') { 
  43.  p(v.toJSONString()); 
  44.  } 
  45.  } else { 
  46.  p("null"); 
  47.  } 
  48.  } 
  49.  break; 
  50.  default: 
  51.  p(v.toJSONString()); 
  52.  } //phpfensi.com 
  53.  } 
  54.  } 
  55.  
  56. // Join all of the fragments together and return. 
  57.  
  58. a.push('}'); 
  59.  return a.join(''); 
  60.  }; 
  61. */ 

修改 common.js getSelectedAttributes方法,如果需要的话,这里是解决商品商品属性点击的时候切换价格的.

  1. /** 
  2.  * 获得选定的商品属性 
  3.  */ 
  4. function getSelectedAttributes(formBuy) 
  5.  var spec_arr = new Array(); 
  6.  var j = 0; 
  7.  
  8. for (i = 0; i < formBuy.elements.length; i ++ ) 
  9.  { 
  10.  var prefix = formBuy.elements[i].name.substr(0, 5); 
  11.  
  12. if (prefix == 'spec_' && ( 
  13.  ((formBuy.elements[i].type == 'hidden' || formBuy.elements[i].type == 'checkbox') && formBuy.elements[i].checked) || 
  14.  formBuy.elements[i].tagName == 'SELECT')) 
  15.  { 
  16.  spec_arr[j] = formBuy.elements[i].value; 
  17.  j++ ; 
  18.  } 
  19.  } 
  20.  
  21. return spec_arr; 

common.js 加入:

  1. </pre> 
  2. function obj2str(o){ 
  3.  var r = []; 
  4.  if(typeof o =="string"return "\""+o.replace(/([\'\"\\])/g,"\\$1").replace(/(\n)/g,"\\n").replace(/(\r)/g,"\\r").replace(/(\t)/g,"\\t")+"\""
  5.  if(typeof o =="undefined"return "undefined"
  6.  if(typeof o == "object"){ 
  7.  if(o===nullreturn "null"
  8.  else if(!o.sort){ 
  9.  for(var i in o) 
  10.  r.push("\""+i+"\""+":"+obj2str(o[i])) 
  11.  r="{"+r.join()+"}" 
  12.  }else
  13.  for(var i =0;i<o.length;i++) 
  14.  r.push(obj2str(o[i])) 
  15.  r="["+r.join()+"]" 
  16.  } 
  17.  return r; 
  18.  } 
  19.  return o.toString(); 

加入购物车改为:

  1. Ajax.call('flow.php?step=add_to_cart''goods=' + obj2str(goods), addToCartResponse, 'POST''JSON'); 

ECshop在IE下js无法获得默认属性的解决方法.

商品属性美化之后,属性都用 type= hidden 形式,就算给了默认值 checked=true,IE进入第一次加载的时候还是无法获得attr的值。

解决:在goods.dwt 属性加一个默认值 defaultChecked,如:

  1. <!-- {foreach from=$spec.values item=value key=key} --> 
  2.                 
  3.               <span class="fl junma {if $key eq 0}hover{/if}" name="spec_{$spec_key}" value="{$value.id}"> {$value.label} 
  4.                 </span> 
  5.            <input type="hidden" name="spec_{$spec_key}" value="{$value.id}" {if $key eq 0}checked="true" defaultChecked="true"{/if}> 
  6. <!-- {/foreach} --> 

common.js里面,js修改为:

  1. /** 
  2.  * 获得选定的商品属性 
  3.  */ 
  4. function getSelectedAttributes(formBuy) 
  5.   var spec_arr = new Array(); 
  6.   var j = 0; 
  7.  
  8.   for (i = 0; i < formBuy.elements.length; i ++ ) 
  9.   { 
  10.     var prefix = formBuy.elements[i].name.substr(0, 5); 
  11.     if (prefix == 'spec_' && ( 
  12.       ((formBuy.elements[i].type == 'hidden' || formBuy.elements[i].type == 'checkbox') && formBuy.elements[i].checked) || 
  13.       formBuy.elements[i].tagName == 'SELECT' || formBuy.elements[i].getAttribute('defaultChecked'))) 
  14.     { 
  15.           
  16.       spec_arr[j] = formBuy.elements[i].value; 
  17.       j++ ; 
  18.     } 
  19.   } 
  20.  
  21.   return spec_arr; 

Tags: jquery冲突 ecshop商品属性

分享到: