如何在添加关联产品的时候搜索结果的列表里面也包含这个产品自身

2016-07-07 15:06 来源:www.chinab4c.com 作者:ecshop专家

比如我一个类别里面有10个产品,当我在后台要给这个类别内一个产品加入关联产品的时候,搜索这个类别的所有产品,结果出来的只有9个产品,既不包含这个产品自身.
但是我想搜索结果也包含这个产品自身,看了半天代码,好象最后是这个selectzone.js文件在起作用,请问下面代码中哪一句是控制这个的,
如何修改才能实现搜索结果也包含这个产品自身.
  1. var selOpt= new Array();

  2. for (var i = 0; i < this.sourceSel.length; i ++ )
  3. {
  4. if (!this.sourceSel.options.selected && all == false) continue;

  5. if (this.targetSel.length > 0)
  6. {
  7. var exsits = false;
  8. for (var j = 0; j < this.targetSel.length; j ++ )
  9. {
  10. if (this.targetSel.options[j].value == this.sourceSel.options.value)
  11. {
  12. exsits = true;

  13. break;
  14. }
  15. }

  16. if (!exsits)
  17. {
  18. selOpt[selOpt.length] = this.sourceSel.options.value;
  19. }
  20. }
  21. else
  22. {
  23. selOpt[selOpt.length] = this.sourceSel.options.value;
  24. }
  25. }
复制代码


回答:
  1. /* $Id : selectzone.js 4824 2007-01-31 08:23:56Z paulgao $ */

  2. /* *
  3. * SelectZone 类
  4. */
  5. function SelectZone()
  6. {
  7. this.filters= new Object();

  8. this.id= arguments[0] ? arguments[0] : 1;// 过滤条件:1 商品关联 2 组合、赠品(带价格)
  9. this.sourceSel = arguments[1] ? arguments[1] : null;// 源select 对象
  10. this.targetSel = arguments[2] ? arguments[2] : null;// 目标 select 对象
  11. this.priceObj= arguments[3] ? arguments[3] : null;// 价格

  12. this.filename= location.href.substring((location.href.lastIndexOf("/")) + 1, location.href.lastIndexOf("?")) + "?is_ajax=1";
  13. var _self = this;

  14. /**
  15. * 载入源select对象的options
  16. * @paramstringfuncName ajax函数名称
  17. * @paramfunction response 处理函数
  18. */
  19. this.loadOptions = function(act, filters)
  20. {
  21. Ajax.call(this.filename+"&act=" + act, filters, this.loadOptionsResponse, "GET", "JSON");
  22. }

  23. /**
  24. * 将返回的数据解析为options的形式
  25. * @paramresult返回的数据
  26. */
  27. this.loadOptionsResponse = function(result, txt)
  28. {
  29. if (!result.error)
  30. {
  31. _self.createOptions(_self.sourceSel, result.content);
  32. }

  33. if (result.message.length > 0)
  34. {
  35. alert(result.message);
  36. }
  37. return;
  38. }

  39. /**
  40. * 检查对象
  41. * @return boolean
  42. */
  43. this.check = function()
  44. {
  45. /* source select */
  46. if ( ! this.sourceSel)
  47. {
  48. alert('source select undefined');
  49. return false;
  50. }
  51. else
  52. {
  53. if (this.sourceSel.nodeName != 'SELECT')
  54. {
  55. alert('source select is not SELECT');
  56. return false;
  57. }
  58. }

  59. /* target select */
  60. if ( ! this.targetSel)
  61. {
  62. alert('target select undefined');
  63. return false;
  64. }
  65. else
  66. {
  67. if (this.targetSel.nodeName != 'SELECT')
  68. {
  69. alert('target select is not SELECT');
  70. return false;
  71. }
  72. }

  73. /* price object */
  74. if (this.id == 2 && ! this.priceObj)
  75. {
  76. alert('price obj undefined');
  77. return false;
  78. }

  79. return true;
  80. }

  81. /**
  82. * 添加选中项
  83. * @parambooleanall
  84. * @paramstringact
  85. * @parammixarguments其他参数,下标从[2]开始
  86. */
  87. this.addItem = function(all, act)
  88. {
  89. if (!this.check())
  90. {
  91. return;
  92. }

  93. var selOpt= new Array();

  94. for (var i = 0; i < this.sourceSel.length; i ++ )
  95. {
  96. if (!this.sourceSel.options[i].selected && all == false) continue;

  97. if (this.targetSel.length > 0)
  98. {
  99. var exsits = false;
  100. for (var j = 0; j < this.targetSel.length; j ++ )
  101. {
  102. if (this.targetSel.options[j].value == this.sourceSel.options[i].value)
  103. {
  104. exsits = true;

  105. break;
  106. }
  107. }

  108. if (!exsits)
  109. {
  110. selOpt[selOpt.length] = this.sourceSel.options[i].value;
  111. }
  112. }
  113. else
  114. {
  115. selOpt[selOpt.length] = this.sourceSel.options[i].value;
  116. }
  117. }

  118. if (selOpt.length > 0)
  119. {
  120. var args = new Array();

  121. for (var i=2; i<arguments.length; i++)
  122. {
  123. args[args.length] = arguments[i];
  124. }

  125. Ajax.call(this.filename + "&act="+act+"&add_ids=" +selOpt.toJSONString(), args, this.addRemoveItemResponse, "GET", "JSON");
  126. }
  127. }

  128. /**
  129. * 删除选中项
  130. * @paramboolean all
  131. * @paramstringact
  132. */
  133. this.dropItem = function(all, act)
  134. {
  135. if (!this.check())
  136. {
  137. return;
  138. }

  139. var arr = new Array();

  140. for (var i = this.targetSel.length - 1; i >= 0 ; i -- )
  141. {
  142. if (this.targetSel.options[i].selected || all)
  143. {
  144. arr[arr.length] = this.targetSel.options[i].value;
  145. }
  146. }

  147. if (arr.length > 0)
  148. {
  149. var args = new Array();

  150. for (var i=2; i<arguments.length; i++)
  151. {
  152. args[args.length] = arguments[i];
  153. }

  154. Ajax.call(this.filename + "&act="+act+"&drop_ids=" + arr.toJSONString(), args, this.addRemoveItemResponse, 'GET', 'JSON');
  155. }
  156. }

  157. /**
  158. * 处理添加项返回的函数
  159. */
  160. this.addRemoveItemResponse = function(result,txt)
  161. {
  162. if (!result.error)
  163. {
  164. _self.createOptions(_self.targetSel, result.content);
  165. }

  166. if (result.message.length > 0)
  167. {
  168. alert(result.message);
  169. }
  170. }

  171. /**
  172. * 为select元素创建options
  173. */
  174. this.createOptions = function(obj, arr)
  175. {
  176. obj.length = 0;

  177. for (var i=0; i < arr.length; i++)
  178. {
  179. var opt= document.createElement("OPTION");
  180. opt.value = arr[i].value;
  181. opt.text= arr[i].text;
  182. opt.id = arr[i].data;

  183. obj.options.add(opt);
  184. }
  185. }
  186. }
复制代码