window.open(p+".html")——问题出在,这里p="",即便从表单中取值取到了x="",成立,也不可能打开你要的页面啊,这里绝对出错啊,因为找不到这么一个页面。因为p+".html"得出来的是一个字符串,p+".html"=“.html”,只有一个后缀名,并没有页面的名称,你怎么打开这个页面?结果1:什么都不输入,直接提交,绝对会报你找不到这个页面的错误。结果2:输入一个空格或者其他内容,就会弹出“恭喜您,答错了,看来你的JS还得加强哦 ”这句话
}else{
alert("恭喜您,答错了,看来你的JS还得加强哦 !")
}解答如上:再强调下x=p后跳转到哪吧。如果你的代码写成这样:function PassConfirm() {
var p="myname"——给p一个值
var x=document.all.name.value
if (x==p) {
window.open(p+".html")
}else{
alert("恭喜您,答错了,看来你的JS还得加强哦 !")
}
}在文本框中输入myname后,提交,此时x被赋值x=myname,既然p=myname,x=myname,条件成立(x==p),进入window.open(p+".html")这行代码,打开的页面就叫myname.html(注:p="myname",p+".html"="myname"+"html",这叫连接字符串,连起来就=myname.html了)了。楼主要记住一点,这里是打开一个新页面,并不是跳转到另一个页面。
比较两个Input里面的值 a的不能小于b的值 form在提交的时候先去执行一个check的操作,只有在a的值小于b的值的情况下,不提交而且探出一个对话框说明a小于b这样子。光标停留在a的文本框上,比较不出来的情况下 什么也不做。 页面初始化的时候a的文本框是ddddd显示,b的文本框是空白显示,如果鼠标点击a的文本框的话,会清空a里面的内容。你好,不知道你是想让大家帮你解释代码呢,还是想找人帮你分析最后console出来的结果。索性我就都帮你解答一下吧。
首先,我们来看一下代码解释:
// 声明一个全局变量name,并给name赋值为window字符串var name = "window"
/**
* 定义一个名为func的函数
* 从后面的使用方式来看,这是一个构造函数
*/
function func() {
// 为构造函数声明一个成员变量name
// 并给成员变量name赋值为func字符串
this.name = "func"
// 为构造函数声明一个成员方法method
this.method = function() {
// 调用【Window对象内置的】setTimeout方法
setTimeout(function() {
// 关键在与此处的this为什么指向的是Window??
console.log(this.name)
}, 0)
}
}
// 创建一个func的实例对象,并调用它的method方法
new func().method()
接着,我们来分析一下运行结果。
第一点,搞清楚一个问题。在浏览器中声明一个全局变量,会默认作为Window对象的属性。所以,当执行完'var name = "window"'之后,便有了'window.name = "window"'可如下验证:
var name = 'new name'console.log(window.name) // new name
第二点,Javascript程序中,在没有通过call、apply等方法人为控制的情况下,this指向的是被调用的方法所属的对象。如题:method方法被调用的时候,method内部的this指向的应该是被new出来的实例对象,验证方法:
function func() {this.method = function() {
console.log(this === instanceObj)
}
}
var instanceObj = new func()
instanceObj.method() // true
第三点,为什么题述代码console出来的是"window",而不是"func"?我们先看setTimeout方法是一个全局方法,即:setTimeout === window.setTimeout。因此setTimeout所属的对象应该是window。再根据第二条的结论,setTimeout内部的this指向的应该是window对象,那么结论就显而易见了:因为window.name = "window",所以最终打印出来的就是"window"了。
希望我讲得够清楚了,如有疑问可追问,望采纳~