JavaScript¶
- comparisons of different libraries & frameworks
- https://todomvc.com/
jQuery¶
to include jQuery
basics¶
declaration¶
- var
- let
- block scoped
- const
- block scoped
- can't change value
for loop¶
for(let i=0; i<=s.length; i++)
- 千萬要加
let
- 千萬要加
for(var item of array)
=for item in array
in Pythonfor(var i in array)
=for i in range(len(array))
in Pythonfor(var key in json)
=for key in dict
in Python
string¶
slice¶
str.slice(0,5)
function¶
execute function after another¶
example
# func1 -> func2
function func1(something, callback){
console.log(something);
callback();
}
function func2(something){
console.log(something);
}
func1('haha', func2);
pass parameter to callback¶
example
function funcHandler(callback){
callback(function(){
console.log('2nd');
});
}
function func1(something, callback){
console.log(something);
callback();
}
funcHandler(function(callback){
func1('1st', callback);
});
// result:
// '1st'
// '2nd'
https://stackoverflow.com/a/3458816/15493213
event handler¶
$(document).off("change","[name=refundItem]");
$(document).on("change", "[name=refundItem]", function(){
itemidx = this.value;
if(this.checked){
$('#refundAmt'+itemidx).show();
}
if(!this.checked){
$('#refundAmt'+itemidx).hide();
}
});
$('#refresh').off('click');
$('#refresh').on('click', function(){
console.log('fwfw');
getOverallAttendance();
});
https://stackoverflow.com/questions/10979865
Cookie¶
When setting a cookie on the child page / subdomain that has been set in root page / main domain, it will create a duplicate cookie in front of the previous one, instead of directly changing the value. To avoid this, append domain
& path
when setting cookie.
document.cookie = cookieName + "=" + newValue + '; domain=' + window.location.hostname + '; path=/';
https://stackoverflow.com/a/5671466/15493213
disable/enable style¶
jQuery
https://stackoverflow.com/questions/5609165/changing-attribute-type-from-text-to-password
vanilla https://stackoverflow.com/questions/54440748/how-to-disable-a-style-element-in-html-js
HTTP Request¶
Axios¶
axios.post('/login', {
firstName: 'Finn',
lastName: 'Williams'
})
.then((response) => {
console.log(response);
}, (error) => {
console.log(error);
});
change theme¶
Use data attribute.
e.g.
function toggleTheme(){
prevTheme = document.documentElement.dataset.theme;
document.documentElement.dataset.theme = prevTheme === "night" ? "day" : "night";
}
:root {
--color-bg: #000;
--color-txt: #fff;
}
:root[data-theme="day"] {
--color-bg: #fff;
--color-txt: #000;
}
body {
background: var(--color-bg);
color: var(--color-txt);
}
Make html directly editable¶
draggable element¶
https://jsfiddle.net/dlccyes/s84thyLn/2/
using jquery
drag #night-btn
in this code
var initPos = [-1,-1];
$('#night-btn').click(function(e){
if(e.clientX == initPos[0] && e.clientY == initPos[1]){
if(!night){
$('#day-css').remove();
$('head').append('<link rel="stylesheet" href="style_b.css" id="night-css">');
$('#night-btn').html('🌞');
night = 1;
}else{
$('#night-css').remove();
$('head').append('<link rel="stylesheet" href="style_w.css" id="day-css">');
$('#night-btn').html('🌚');
night = 0;
}
}
});
$('#night-btn').mousedown(function(e){
initPos = [e.clientX, e.clientY];
yoffset = $('#night-btn').offset().top-e.clientY;
xoffset = $('#night-btn').offset().left-e.clientX;
onmousemove = function(e){
yy = yoffset+e.clientY;
xx = xoffset+e.clientX
$("#night-btn").css({top: yy, left: xx, position:'absolute'});
};
});
$('#night-btn').mouseup(function(e){
onmousemove = function(){};
});