1. 程式人生 > >關於商城網站商品sku選擇的js簡易實現

關於商城網站商品sku選擇的js簡易實現

網上找了一些大家提供的js,不太滿意,主要原因是和我拿到手的json格式出入很大,導致改起來很麻煩,於是自己寫了點

先上效果圖,因為工程原有,帶有其他樣式外掛,不好搬過來,所以這裡自己簡單畫了點樣式。


我處理過後的json資料如下:

{
    "spec_keys": [
        "顏色",
        "款式"
    ],
    "spec_kv": {
        "顏色": [
            "白色",
            "黑色",
            "橙色"
        ],
        "款式": [
            "豪華版",
            "標準版"
        ]
    },
    "spec_infos": [
        {
            "spec_info": "@
[email protected]
黑色@[email protected]標準版@[email protected]", "sku_id": 111 }, { "spec_info": "@[email protected]黑色@[email protected]豪華版@[email protected]", "sku_id": 112 }, { "spec_info": "@[email protected]
白色@[email protected]標準版@[email protected]", "sku_id": 113 }, { "spec_info": "@[email protected]白色@[email protected]豪華版@[email protected]", "sku_id": 114 }, { "spec_info": "@[email protected]橙色@[email protected]
標準版@[email protected]", "sku_id": 115 } ] }

html程式碼就比較簡單了

<label class="control-label">規格</label>
			<div class="spec-div"></div>
			<div  class="form-control">
										<span class="input-group-addon sku-name">隨機</span>
										<span class="input-group-addon sku-name-lable">X</span>
										<span class="input-group-addon sku-count-btn" id="task-count-sub">-</span>
										<input type="text" id="taskCount" name="taskCount" value="0">
										<span class="input-group-addon sku-count-btn" id="task-count-add">+</span>
			</div>

js程式碼如下:

/** ******************************sku********************************************* */
var skuInfos;
var skuKeys;
$(function() {
	search_sku();
	$(".spec-div").delegate(".spec-uncheck", "click", function() {
		if(!$(this).hasClass('spec-invalid')){
		$(this).siblings(".spec-btn").removeClass('spec-check');
		$(this).siblings(".spec-btn").addClass('spec-uncheck');
		$(this).addClass('spec-check');
		$(this).removeClass('spec-uncheck');
		spec_invalid($(this));
		sku_confirm();
		}
	});

	$(".spec-div").delegate(".spec-check", "click", function() {
		if(!$(this).hasClass('spec-invalid')){
		$(this).addClass('spec-uncheck');
		$(this).removeClass('spec-check');
		spec_invalid_exit($(this));
		$(".sku-name").text("隨機");
		}
	});

	$("#task-count-sub").on('click', function() {
		var intnum = $("#taskCount").val();
		if (intnum == 0) {
			return false;
		} else {
			intnum = parseInt(intnum) - 1;
		}
		$("#taskCount").val(intnum);
	});

	$("#task-count-add").on('click', function() {
		var intnum = $("#taskCount").val();
		intnum = parseInt(intnum) + 1;
		$("#taskCount").val(intnum);
	});
	

	$(".content").delegate(".task-export", "click", function() {
		$(this).removeClass('green-span');
		$(this).addClass('white-span');
		$(this).find("i").removeClass('white');
		$(this).find("i").addClass('black');
	});
})

function search_sku() {
	$("#search-sku").off('click');
	$("#search-sku").addClass('invalid-btn');
	$("#reset-sku").removeClass('invalid-btn');
	$("#taskTargetId").attr("readonly", "readonly");
	$("#reset-sku").off('click');
	$("#reset-sku").on('click', function() {
		reset_sku();
	});
	$
			.ajax({ // 使用jquery-form提交資料
				type : 'POST',
				dataType : "json",
				url : "sku.json",
				async : true,
				success : function(data) {
					if (data.result == -100) {
						return false;
					} else {
						skuInfos = data.spec_infos;
						skuKeys = data.spec_keys;
						if (data.spec_keys.length == 0) {
							$("#taskSkuid").val(data.spec_infos[0].sku_id);
							$(".sku-name").text("無");
						} else {
							var skuhtml = "";
							for (var i = 0; i < data.spec_keys.length; i++) {
								skuhtml = skuhtml
										+ "<div class=\"spec-key-lable form-control\">"
										+ data.spec_keys[i] + "</div>";
								console.log(data.spec_kv[data.spec_keys[i]]);
								skuhtml = skuhtml
										+ "<div class=\"spec-value-lable form-control\">";
								for (var k = 0; k < data.spec_kv[data.spec_keys[i]].length; k++) {
									skuhtml = skuhtml
											+ "<span class=\"input-group-addon spec-btn spec-uncheck\">"
											+ data.spec_kv[data.spec_keys[i]][k]
											+ "</span>";
								}
								skuhtml = skuhtml + "</div>";
							}
							$(".spec-div").append(skuhtml);
						}
						$(".task-info").show();
					}
				},
				error : function() {
				}
			});

}

function spec_invalid(specObj) {
	var btns = new Array();
	specObj.parent().siblings(".spec-value-lable").children(".spec-btn").each(
			function(key, value) {
				btns[key] = $(this).text();
				$(this).addClass('spec-invalid');
				$(this).removeClass('spec-uncheck');
				for (var i = 0; i < skuInfos.length; i++) {
					if (skuInfos[i].spec_info.indexOf("@[email protected]" + specObj.text()
							+ "@[email protected]") >= 0
							&& skuInfos[i].spec_info.indexOf("@[email protected]" + btns[key]
									+ "@[email protected]") >= 0) {
						$(this).removeClass('spec-invalid');
						$(this).addClass('spec-uncheck');
						break;
					}
				}
			});

}

function spec_invalid_exit(specObj) {
	var btns = new Array();
	specObj.parent().siblings(".spec-value-lable").children(".spec-btn").each(
			function(key, value) {
				btns[key] = $(this).text();
				var isSpec = false;
				for (var i = 0; i < skuInfos.length; i++) {
					if (skuInfos[i].spec_info.indexOf("@[email protected]" + specObj.text()
							+ "@[email protected]") >= 0
							&& skuInfos[i].spec_info.indexOf("@[email protected]" + btns[key]
									+ "@[email protected]") >= 0) {
						isSpec = true;
						break;
					}
				}
				if (!isSpec) {
					$(this).removeClass('spec-invalid');
					$(this).addClass('spec-uncheck');
				}
			});
}

function sku_confirm() {
	var skuid = 0;
	var checkSkuInfo = "";
	for (var i = 0; i < skuInfos.length; i++) {
		var btns = new Array();
		checkSkuInfo = "";
		var selectedCount = 0;
		$(".spec-check").each(function(key, value) {
			btns[key] = $(this).text();
			if (skuInfos[i].spec_info.indexOf("@[email protected]" + btns[key] + "@[email protected]") >= 0) {
				selectedCount = selectedCount + 1;
				checkSkuInfo = checkSkuInfo + btns[key] + " ";
			}
		})
		if (selectedCount == skuKeys.length) {
			skuid = skuInfos[i].sku_id;
			break;
		}
	}
	if (selectedCount == skuKeys.length) {
		skuid = skuInfos[i].sku_id;
		console.log("id=" + skuid + " " + checkSkuInfo)
		$(".sku-name").text(checkSkuInfo);
		$("#taskSkuid").val(skuid);
		$("#taskName").val(checkSkuInfo);
	} else {
		$(".sku-name").text("隨機");
		$("#taskSkuid").val(0);
		$("#taskName").val("");
	}
}
這裡大致把程式碼貼一下,最後獲取資料,定義兩個隱藏的input即可,taskSkuid和taskName 這樣這個規格資料基本就拿到了

相關推薦

關於商城網站商品sku選擇js簡易實現

網上找了一些大家提供的js,不太滿意,主要原因是和我拿到手的json格式出入很大,導致改起來很麻煩,於是自己寫了點 先上效果圖,因為工程原有,帶有其他樣式外掛,不好搬過來,所以這裡自己簡單畫了點樣式。 我處理過後的json資料如下: { "spec_keys":

排序算法——選擇排序(js語言實現)

col log () color chan 算法 lec 選擇 代碼 選擇排序:顧名思義選擇,選擇排序屬於O(N^2)的排序算法,意思就是選擇數組中的最小的拿出來放在第一位,然後再剩下的數裏面,選擇最小的,排在第二位,以此類推。 例如:8 3 4 5 6 2 1

Mock.js簡易教程,脫離後端獨立開發,實現增刪改查功能

定義 數據 false 則表達式 type break 整數 增 刪 改 查 大於 在我們的生產實際中,後端的接口往往是較晚才會出來,並且還要寫接口文檔,於是我們的前端的許多開發都要等到接口給我們才能進行,這樣對於我們前端來說顯得十分的被動,於是有沒有可以制造假數據來模擬後

電商入口網站商品品類多級聯動SpringBoot+Thymeleaf實現

在淘寶、京東等電商網站,其入口網站都有一個商品品類的多級聯動,滑鼠移動,就顯示,因為前端不是我做的,所以不說明前端實現,只介紹後端實現。 搭建部署SpringBoot環境 配置檔案配置: 開啟了對Thymeleaf模組引擎的支援 server: port: 8081 #logging: # conf

文獻綜述六:基於JS 技術的電子商品管理系統設計及實現

一、基本資訊   標題:基於JS 技術的電子商品管理系統設計及實現   時間:2017   出版源:無線互聯科技   檔案分類:js技術的研究 二、研究背景   主要對Js下電商管理系統的設計及實現進行了探討,利用軟體工程的設計方法和先進的軟體開發框架來實現電子商務管理。 三、具體內容   開頭提到了什麼是j

JS選擇器練習實現簡單的封裝

獲取所有的div和p標籤,併為其加上背景顏色 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>&l

原生js-簡易點名冊實現

本人前端新手,最近實現了基於js點名冊的簡單實現,方便快捷,現在直接上程式碼 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>

Material之Behavior實現支付寶密碼彈窗 仿淘寶/天貓商品屬性選擇

今天的效果在支付寶、淘寶、京東等電商App中很常見。比如支付寶輸入密碼彈窗、商城下單時選擇商品屬性時,從下面浮動上來一個PopupWindow,那麼今天就帶大家用Behavior來實現這兩個效果,結果你會發現簡直只需要一行程式碼。 總結下現在用的APP:

js cookies實現網站換膚功能

經常訪問本站的朋友,細心的話,應該能發現每次訪問本站,顯示的背景圖片都不一樣!背景每次都換,本想給人新鮮感,但不見得每一個到訪者都會喜歡這個功能,也許有人下次到訪時還會產生一個疑問:咦,怎麼這網站樣子變了,是我上次看的那個網站嗎?  好吧,其實做這

JS簡易日曆實現

效果圖 實現點 01.表格行數問題 首先得知道這個表格有多少行多少列,列數是已經確定的,從星期天(日曆上第1列是星期天)到星期六一共7列 getDay()方法了,該方法返回陣列[0-6]中的一個數字,0代表星期天,1代表星期一,2代表星期二,

淘淘商城25_商品詳情頁面實現02_商品詳情

一、展示商品詳情 1. dao層 2. Service層 3. serviceImpl /** * 查詢商品詳情 * @param itemId * @return */ @Override public TbItemDesc getItemDescB

淘淘商城25_商品詳情頁面實現01_查詢商品

一、思想 建立一個taotao-item-web工程,展示商品的詳情。 點選商品的圖片,開啟商品詳情頁面 商品基本資訊 延遲載入商品詳情。延遲一秒載入使用ajax 商品的規格引數。按需載入,當用戶點選商品規格引數tab頁,載入ajax。

Android多維商品屬性SKU選擇

前言: 最近又做到這一塊的需求,以前也做過類似仿淘寶的屬性選擇,當時在網上下載的demo參考,最多也支援兩組商品屬性,用的兩個gridview結合,擴充套件性很差,這次不打算用之前的程式碼,所以重新自己寫了一個demo**(文末附上專案地址)** 如圖所

JS輕鬆實現單擊文字框彈出選擇日期

// 主呼叫函式是 setday(this,[object])和setday(this),[object]是控制元件輸出的控制元件名,舉兩個例子: // 一、<input name=txt><input type=button value=setday

day76_淘淘商城專案_09_商品詳情頁動態展示實現(jsp+redis) + FreeMarker模板引擎入門 + 商品詳情頁靜態化實現(Win版本的nginx作http伺服器)_匠心筆記

淘淘商城專案_09 1、商品詳情頁面展示,動態展示(jsp + redis) 1.1、工程搭建 1.1.1、pom檔案 1.1.2、框架整合 1.1.3、springmvc.xml

android商品屬性選擇標籤控制元件,可實現自動換行

一、demo功能 在電商專案中,商品屬性選擇是必不可少的,而且屬性的數目和長度不是固定的,就有了 “標籤選擇”。以下我就借用了開源的AutoFlowLayout控制元件,根據商品屬性選擇要求寫了這個demo,和大家分享 二、程式碼介紹 1.功能 AutoFlo

電商類app商品詳情引數選擇聯動的實現

背景 近期,筆者剛剛忙完手頭上的專案,終於有時間整理一下專案中用到的技術,作為自己的工作筆記,也為有類似需求的讀者提供參考。接下來的幾篇文章,我將記錄電商app中常見的部分功能點的實現。 本篇,我將介紹商品詳情頁規格(sku)選擇彈框的實現。

jqury簡易實現checkbox反選與全選

all 效果 mage aps 簡單 一段 .cn 改變 定義 前段時間,一個同事讓我幫忙寫個全選與反選的功能,本來一段很簡單的代碼,突然卡頓,寫了好幾個小時,其實之前也做過類似的功能,只是一下子就懵逼了,簡而言之還是自己對checkbox的反選與全選沒有掌握十足,所以再利

js 簡易時鐘

center return ner func gin tel int 字符 rip html部分 <div id="clock"> </div> css部分 #clock{ width:600px ; text-align: cente

個人網站如何使用支付寶收款實現

php 支付寶想給個人網站增加一個支付,找到https://neue.v2ex.com/t/350564,按照裏面大家討論的,還真的可以了。1.開通功能https://neue.v2ex.com/t/326701 有個商家二維碼圖中二維碼是服務商的員工碼,作為推廣的服務商肯定是會有返利但是不通員工碼,個人是