function login(buttonId){
//假设buttonId是你点击的那个button的id
//你可以设置一个button为userLogin,另一个为adminLogin
var userType = document.createElement("input")
userType.type = "hidden"
userType.name = "userType"
if (buttonId == "userLogin"){
userType.value = "user"
}else if (buttonId == "adminLogin"){
userType.value = "admin"
}
//这样就创建了一个<input type="hidden" name="userType" value="user或者admin">
//然后添加到提交的那个form中
document.all.loginForm.appendChild(userType)
//最后提交form,后台就能得到这个参数了
document.all.loginForm.submit()
}
<!doctype html><html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script>
window.addEventListener('load',function(){
// 点击t-1时同时触发t-2点击
document.getElementById('x-1').addEventListener('click',function(e){
console.log(e.target.id)
// 创建事件对象
var event = document.createEvent('HTMLEvents')
event.initEvent('click', false,false)
event.eventType = 'message'
// 把事件触发信息传递给兄弟节点
e.target.nextElementSibling.dispatchEvent(event)
})
document.getElementById('x-2').addEventListener('click',function(e){
console.log(e.target.id)
})
})
</script>
</head>
<body>
<ul>
<li id="x-1">t-1</li>
<li id="x-2">t-2</li>
</ul>
</body>
</html>
js中可以改变方法作用域和参数的方式有三种,apply,call,bind.
apply 和call类似第一个参数是方法的作用域,其它参数是方法的参数。不同的是apply的其它参数是个数组,数组的个数为参数的个数,call除开第一个参数其它参数方法参数,例子如下
function method() {console.log(this, arguments)
}
var a = 1
var b = 2, c = 3, d = 4
method.call(a, b, c, d)// 打印 [Number: 1] { '0': 2, '1': 3, '2': 4 }
method.apply(a, [b, c, d])// 同上 [Number: 1] { '0': 2, '1': 3, '2': 4 }
bind 和call参数传递方式一致,唯一区别是bind不会立即执行,只会更改作用域和方法参数,到真正执行方法时才会执行。
var t = method.bind(a, b)t()// [Number: 1] { '0': 2 }
t = t.bind(null, c)
t()// [Number: 1] { '0': 2, '1': 3 }
t = t.bind(null, d)
t() // [Number: 1] { '0': 2, '1': 3, '2': 4 }
可以采用bind方法进行更改事件绑定的方法的参数及作用域。