แสดงบทความที่มีป้ายกำกับ JavaScript แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ JavaScript แสดงบทความทั้งหมด

03 กันยายน, 2557

[jQuery] วิธีเช็กว่าการ "click" ที่ปุ่มมาจากการคลิกจริงๆ หรือจากสคริปต์ "trigger"



ในการเขียนเว็บ เราสามารถสั่ง jQuery ให้ทำให้เกิดอีเวนท์แทน user ได้โดยการสั่ง trigger
เช่นต้องการให้ปุ่มนี้โดนกดแต่ user ไม่ได้กดเอง เราก็สั่ง
$('button').trigger('click');
ได้เลย
แต่ว่าบางครั้งเราก็ต้องการรู้ว่าจริงๆ แล้วอีเวนท์การคลิก (รวมถึงอีเวนท์อื่นๆ ด้วย) มาจากการที่เราสั่ง trigger เองหรือมาจากการคลิกจริงๆ


นี่มันtigger ไม่ใช่trigger

24 มกราคม, 2557

"Merge" และ "Intersect" ใน JavaScript ทำยังไง?

ช่วงนี้เขียน JavaScript ในส่วนที่ทำงานกับ Array และ Object บ่อย

หนึ่งใน action ที่ทำบ่อยมากคือ การผสาน (merge) Object หนึ่งตัว (หรือมากกว่า) และ การเลือกซ้ำ (intersect) Array สองตัวเข้าด้วยกัน
function mergeObj(){
    var r = { };
    for( var i in arguments ){
        for( var j in arguments[i] ){
            r[j] = arguments[i][j];
        }
    }
    return r;
}

var a = {x:1, y:2, z:3};

var b = {q:10, w:20, e: 30, x:40};

var result = mergeObj(a,b);

//result is {x:40, y:2, z:3, q:10, w:20, e:30}
       
สำหรับ mergeObj นั้นสามารถส่ง Object เป็น parameter เข้าไปกี่ตัวก็ได้เพราะรับค่าด้วยตัวแปร arguments
function intersect( arr1, arr2 ){
    if( arr1 instanceof Array && arr2 instanceof Array ){

        //make arr1 smaller than arr2
        if( arr1.length > arr2.length ){
            var tmp = arr1;
            arr1 = arr2;
            arr2 = tmp;
        }

        return arr1.filter(function( n ){
            return arr2.indexOf(n) !== -1;
        });
    }
    return [ ];
}


var a = [1,2,3,4,5,6,7,8,9,10];

var b = [2,4,6,8,10,12,14,16];

var result = intersect(a,b);

//result is [2,4,6,8,10]
 ส่วน intersect จะใช้กับ Array โดยใช้คุณสมบัติของ .filter เข้าช่วย