jquery.unduplicated plugin นี้สร้างขึ้น เพื่อใช้สำหรับกำหนดเงื่อนไข
ให้กับ element ที่เป็น select option ให้สามารถเลือกรายการใดๆ ได้แค่ครั้งเดียว
จากรายการตัวเลือกชุดเดียวกัน ใช้งานง่าย รองรับการกำหนดค่าเริ่มต้น กรณีใช้ในการ
แก้ไข
การนำไปใช้
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="js/jquery.unduplicated.js"></script>
<script>
$(function(){
// กรณีไม่ได้ กำหนดค่าเริ่มต้น
$(".css_s").unduplicated();
// กรณีกำหนดค่าเริ่มต้น
/* $(".css_s").unduplicated({
initialVal:[2,3,1,4]
});*/
// กรณีกำหนดค่าเริ่มต้น
$(".css_s2").unduplicated({
initialVal:['การตลาด','การบัญชี','การโรงแรม','การเงิน']
});
});
</script>
ดูตัวอย่างได้ท้ายบทความ
ให้เราสร้างไฟล์ชื่อ jquery.unduplicated.js ดังนี้
// jQuery Unduplicated Plugin 09/07/2017
// www.ninenik.com
(function($){
// setbackground คือชื่อของ plugin ที่เราต้องการ ในที่นี้ ใช้ว่า setbackground
$.fn.unduplicated = function( options ) { // กำหนดให้ plugin ของเราสามารถ รับค่าเพิ่มเติมได้ มี options
// ส่วนนี้ สำหรับกำหนดค่าเริ่มต้น
var defaults={
initialVal:null
};
// ส่วนสำหรับ เป็นต้วแปร รับค่า options หากมี หรือใช้ค่าเริ่มต้น ถ้ากำหนด
var settings = $.extend( {}, defaults, options );
var arrSelectVal=[];
var optionsObj = this.find("option");
$(this).on("change",function(){
arrSelectVal=[];
var indexThis = $(".css_unduplicated").index(this);
$(".css_unduplicated").each(function(i,k){
var optionHtml="";
var prevObj = $(".css_unduplicated:lt("+i+")").length;
var prevVal = $(".css_unduplicated:eq("+(i-1)+")").val();
if(prevObj>0){
arrSelectVal.push(prevVal);
}
if(i>0 && i!=indexThis && i>indexThis){
$.each(optionsObj,function(s,html){
if(arrSelectVal.indexOf($(html).val())==-1){
optionHtml+=html.outerHTML;
}
});
}
if(optionHtml!=""){
$(this).html(optionHtml);
}
});
});
/// คืนค่ากลับ การทำงานของ plugin
return this.each(function(j,k) {
$(this).addClass("css_unduplicated");
var optionHtml="";
var prevObj = $(".css_unduplicated:lt("+j+")").length;
var prevVal = $(".css_unduplicated:eq("+(j-1)+")").val();
if(prevObj>0){
arrSelectVal.push(prevVal);
}
if(j>0){
$.each(optionsObj,function(s,html){
if(arrSelectVal.indexOf($(html).val())==-1){
optionHtml+=html.outerHTML;
}
});
}
if(optionHtml!=""){
$(this).html(optionHtml);
}
if(settings.initialVal!=null){
var setVal = settings.initialVal[j];
$(this).val(setVal);
}
});
};
})(jQuery);
ตัวอย่างไฟล์ทดสอบ demo_unduplicated.php
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
<link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/css/bootstrap.min.css"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://unpkg.com/[email protected]/dist/js/bootstrap.min.js"></script>
</head>
<body>
<br>
<br>
<br>
<div class="container" style="margin:auto;width:400;text-align:left;">
<select name="s1" class="css_s form-control input-sm" style="width:100px;">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
<br>
<select name="s2" class="css_s form-control input-sm" style="width:100px;">
</select>
<br>
<select name="s3" class="css_s form-control input-sm" style="width:100px;">
</select>
<br>
<select name="s4" class="css_s form-control input-sm" style="width:100px;">
</select>
<br>
<a href="duplicate_restrict.php?<?=time()?>">Reload</a>
</div>
<br>
<div class="container" style="margin:auto;width:400;text-align:left;">
<select name="s1" class="css_s2 form-control input-sm" style="width:100px;">
<option value="การเงิน">การเงิน</option>
<option value="การบัญชี">การบัญชี</option>
<option value="การโรงแรม">การโรงแรม</option>
<option value="การตลาด">การตลาด</option>
</select>
<br>
<select name="s2" class="css_s2 form-control input-sm" style="width:100px;">
</select>
<br>
<select name="s3" class="css_s2 form-control input-sm" style="width:100px;">
</select>
<br>
<select name="s4" class="css_s2 form-control input-sm" style="width:100px;">
</select>
<br>
<a href="duplicate_restrict.php?<?=time()?>">Reload</a>
</div>
<script src="js/jquery.unduplicated.js"></script>
<script>
$(function(){
// กรณีไม่ได้ กำหนดค่าเริ่มต้น
$(".css_s").unduplicated();
// กรณีกำหนดค่าเริ่มต้น
/* $(".css_s").unduplicated({
initialVal:[2,3,1,4]
});*/
// กรณีกำหนดค่าเริ่มต้น
$(".css_s2").unduplicated({
initialVal:['การตลาด','การบัญชี','การโรงแรม','การเงิน']
});
});
</script>
</body>
</html>
สังเกตว่า เราต้องกำหนด css class ให้กับชุดรายการ select ให้เหมือนกันเพื่ออ้างอิง selector
อย่างอันแรกเราใช้ css_s ตัวที่สองเราใช้ css_s2 ชื่อ css class นี้เรากำหนดค่าเป็นค่าที่ต้องการก็ได้
ไม่จำเป็นต้องใช้ตามตัวอย่าง