澳门新葡亰网址下载JavaScript权威指南–事件处理

by admin on 2020年1月18日

主题材料1: 如何从表单返加三个值? 
 
答案1:
能够在形式表单的unload事件中用return来回到三个值。     

     在VFP中,表单之间参数的传递与重临重要通过Do Form命令完成

文化要点

澳门新葡亰网址下载 1

客户端JavaScript程序行使了异步事件驱动形成模型(13.3.2节卡塔尔国。这种风格并不只利用于web编制程序,全数应用图形客商分界面包车型地铁应用程序都接纳它,它们独自等待某个事件产生,然后响应。

事件正是web浏览器布告应用程序产生怎么样工作。它不是JavaScript对象,不会冒出在程序源代码中。当然,有些事件相关的靶子会并发在源代码中。

事件类型是一个用来表明爆发什么样项目事件的字符串。由于只是个字符串,所以也能够叫事件名字。

事件目的是爆发的事件或与之有关的指标。事件必得同时致命类型和指标。举个例子window上的load事件或<button>元素的click事件。在客户端JavaScript中,Window、Document和Element对象是最分布的轩然大波指标。某件事件是由其余类别的目的触发,举个例子18章的由XHLAND对象触发的readystatechange事件。

事件管理程序或事件监听程序是管理或响应事件的函数。

事件指标是与特定事件有关且包含关于该事件详细音信的对象。事件指标作为参数字传送递给事件管理程序函数(IE8及早前版本不平等State of Qatar。不论什么事件目的都有用来钦命事件类型的type属性和钦定事件目的的target属性(IE8前的srcElement卡塔尔国。种种事件类型都为其有关事件指标定义风流倜傥组属性,譬如鼠标事件有指针坐标,很两唯有type和target,未有更详实的性质。

事件传播是浏览器决定哪些目的触发其事件处理程序的历程。对于单个对象的一定事件(举个例子Window对象的load事件卡塔尔,必需是不可能流传的。当文书档案成分发生在某些项目标平地风波时,会发出冒泡,还应该有事件捕获(IE8及早先不扶助,所以少用卡塔尔。

事件管理程序能够因而再次回到八个适中的值、调用事件指标的某部方法或设置对象的某部属性来阻拦默许操作的爆发。举例超链接的click事件能够阻止加载新页面。

难题2: 如何在表单设计器中把品质或方法增添到表单中?   
答案2: 用表单设计器窗口或性质/事件/激活的艺术窗口,从菜单中接受表   
单。最初的多少个选项是新属性和新章程。选拔你想要出席的一个并填写属性   
或措施的名目,新建的性情将面世在性质窗口的最尾部。   

   
要是今后有表单test1和test2,分别代表调用表单和被调用表单,要贯彻参数的传递和再次来到,必须开展如下设置:

1.事件类型

难点3: 作者把的工具条或设计窗口移出了荧屏,怎么样把它移回来?   
答案3: 工具条或窗口的职分保存在vfp主目录下的foxuser.dbf表中。借使   
除去或矫正该文件,你的工具条和窗口将还原他们的暗中同意地方或你钦点的岗位。 
 
或从系统菜单的窗口菜单中采纳重新安插全方位。   

        

1.1.守遗闻件类型

表单事件

经过事件管理程序能撤除submit和reset事件的暗中认可操作,某个click事件也是这般。focus和blur事件不会冒泡,但别的全数表单事件都足以。ie定义了focusin和focusout事件能够冒泡,它们能够用于替代focus和blur事件。

甭管顾客哪一天输入文字(通过键盘或瓜分和粘贴)到textarea和别的文件输入表单成分,除ie外的浏览器都会触发input事件。不像change事件,每便文字插入都会触发input事件,缺憾的是,input事件的轩然大波目的未有一点名输入文字的内容(textinput事件将会成为那么些事件的有用代替方案。)

Window事件

Window是指事件的发生与浏览器本人而非窗口中显得的别的特定文书档案内容相关,可是,这个事件中有风流倜傥对会和文书档案成分上发生的风云同名。

window对象的onerror属性有一点点像事件处理程序,当javascript出错时会触发他。但是,它不是真正的事件管理程序,因为它能用不一样的参数来调用(14.6节卡塔尔国。

像<img>成分这样的单个文档成分也能为load和error事件注册处理程序。当外界财富(譬如图片)完全加载或产生阻止加载的荒诞时就能触发它们。有个别浏览器也扶植也扶持abort事件,当图片(或任何互联网能源)因为客户结束加载进度而导致败北就能够触发它.

鼠标事件

传送给鼠标事件管理的风云指标有属性集,它们描述了当事件时有发生时鼠标的任务和按钮状态,也指明了马上是还是不是有别的扶助键按下。clientX和clientY属性钦命了鼠标在窗口坐标中之处,button和which属性钦命了按下的鼠标键是哪个。当键盘扶植键按下时,对应的性质altkey、ctrlKey、metaKey和shiftKey会设置为true。而对此click事件,detail属性钦点了其是单击、双击依然三击。

键盘事件

任由任何文书档案成分得到键盘主题都会触发键盘事件,况兼他们会冒泡到Document和window对象。若无成分得到大旨,能够直接在文书档案上触发事件。传递给键盘事件管理程序的平地风波目的有keyCode字段。它指定按下或自由的键是哪个,除了keyCode,键盘事件目的也是有altKey,ctrlKey、metaKey和shiftKey,描述键盘协助建的意况。

标题4: 当从valid事件重临.f.值时,怎么样幸免’无效的的顾客输入了’新闻?   
答案4: 用 0来替换.f.   
当您从valid事件重临数值时,约等于在装置可拿到关键的控件的tab order。 
 

被调用表单test2的属性设置

1.2.DOM事件

新DOM标准通过在事变指标中参预新的key和char属性来简化keydown、keyup和keypress事件,那个属性都以字符串。

主题材料5: 情势表单和非格局表单的分别是怎么?   
答案5: 情势表单平时地被用来管理错误报告,或许央浼顾客确认操作等。   
在情势表单中,菜单不可能动用。假若急需,方式表单也提供使用’等待意况’。 
 
非情势表单提供更加多的狡滑,它同意客商通过菜单操作,在表单中活动。   

对象

1.3.HTML5事件

标题6: 为啥编写翻译后的程序运营时,荧屏黄金年代闪就淡出了,为何?   
答案6: 你必要在你的前后相继中树立’等待状态’。能够用read events命令来建   
立等待状态。要撤废等待状态,可应用clear events命令。假设你唯有贰个屏 
 
幕,把表单的windowstate属性设置为modal。那也提供等待情形,不过不许 
 
您使用菜单。当情势表单被假释时,等待状态结束并回到至操作系统。   

属性

澳门新葡亰网址下载 2

澳门新葡亰网址下载 3

离线web应用还定义了汪洋此外事件来打招呼应用:

澳门新葡亰网址下载 4

难点7:
为啥当自家创立表单时,小编用set命令设置的情状变量重临到了它们的暗中认可值。 
 
答案7: 那是由于你的表单的数据会话期设置为私有数量职业期。相当多”set”   
指令仅对眼下数据工作期有效。当你持有私有数据专业期时,你必须要再一次确立 
 
那一个设置值。要实现这一目标,你能够打造一个用以景况设置的类。在表单的 
 
init事件中安装你的意况值而在表单的destroy事件中平复其原始值。   

2.挂号事件管理程序

有二种基本办法:第后生可畏种,给事件指标对象或文书档案成分设置属性。第二种形式,是将事件管理程序传递给指标或因素的二个主意,每个工夫都有八个本子。能够在javascript代码中装置事件管理程序为对象属性,或对于文书档案成分,能够在html中一贯设置相应属性。对于通过艺术调用的管理程序注册,有二个行业内部方法,命名称叫add伊夫ntListener,除IE8及早前版本之外,全数浏览器都扶助那个主意,而ie9之前的IE版本协助的是二个叫attach伊芙nt的不等形式。

难点8: 作者在pageframe中的两个页中改变了记录指针,但本人转到别的的页时, 
 
任何的页中的数据依旧是原记录的值。为啥?   
答案8: 你须要在您的每黄金时代页activate(卡塔尔中放置代码来确信突显当前记录值。   
豆蔻梢头旦您在某处推行了thisform.refresh(卡塔尔命令,vfp仅刷新pageframe的当下页 
 
表面包车型地铁内容。试着在各类页(page卡塔尔(قطر‎的activate(卡塔尔中调用this.refresh(卡塔尔国。 &n
bsp;  

frmtest2

2.2.装置HTML标签属性为事件管理程序

一些事件类型日常直接在浏览器而非任何特定文书档案成分上接触。在javascipt中,这个事件管理程序在window对象上注册。在html中,会把他们放在body标签上,但浏览器会在window对象上登记它们

澳门新葡亰网址下载 5

在钦赐豆蔻年华串JavaScript代码充作HTML事件管理程序属性的值时,浏览器会把代码串转换为贴近如下的函数中:

function(event){
  with(document){
    with(this.form || {}){
      with(this){
        /*这里是编码*/
      }
    }
  }
}

主题材料9:
当自己运维表单时,它什么也不显得。表单本人是展示了,但内部的别的对象都不可知 
 
。   
答案9: 试着把lockscreen属性设置为.f.。   

windowstype

3.事件管理程序的调用

难题10: 表单上有生龙活虎对象,但自己看不见它,笔者怎么挑选并校勘它?   
答案10: 张开属性窗口,该窗口中有瞬间拉列表,你可从当中筛选你想编辑的对象。 
 
风度翩翩但你想编辑的目的在下拉列表中高亮呈现,你就足以校勘该对象。要在表单设 
 
计器中用鼠标调解它(或实际看来该指标),从菜单中选择”格式”,然后接收”带到前方”。 
 

1

3.1.事件管理程序的参数 

平时调用事件管理程序时把事件目的作为她们的贰个参数(有一个两样)。事件指标的属性提供了有关事件的详细新闻,比如,type属性钦赐了产生的门类。在IE8及早先版本中,通过安装属性注册管理程序,当调用它们时髦未传递事件指标,取代他,需求通过全局对象window.event来获得事件指标

function handler(event){
var event=event||window.event;
}

向利用attach伊芙nt注册的事件管理程序传递事件指标,但它们也能采用window.event。

17.2.2节,当通过安装HTML属性注册事件管理程序时,浏览器会把javascript编码调换成一个函数中。非IE浏览器接受event参数来布局函数,而IE在布局函数时未尝有要求参数。假如在如此的函数中运用event标志符,那么引用的便是Window.event.在此两种情状下,HTML事件管理程序都能看做event援引事件指标。

主题素材11: 笔者怎么着把一个类从三个类库复制到另生龙活虎类库中?   
答案11: 在专门的学问版中,你能够三回展开类浏览器,从首个类浏览器中类   
型下拉列表框中拖动类的Logo到第三个类浏览器中。确信拖动它到另八个类   
浏览器的表单区中。你能够见到三个复制光标(带箭头的加号)。假使您是   
动用处目管理器且在档案的次序中有多少个类库,你能够从贰个类库中拖动贰个类到   
另三个类库中。但若目的类库中本来就有相像名字的类存在,则操作不会中标。   
也可用vfp 命令来完结那大器晚成任务:   
add class mytextbox of mylib1.vcx to mylib2.vcx.

 

3.2.事件管理程序的运营境遇

当使用add伊夫ntListener注册时,调用的管理程序使用事件指标作为它们的this值。可是,对于attachEvent来说那是十分的:使用attach伊芙nt注册的管理程序作为函数调用,它们的this值是全局对象(window)。可以用如下代码来解决这么些标题:

/*
*在指定的事件目标上注册用于处理指定类型事件的指定处理程序函数
*确保处理程序一直作为事件目标的方法调用
*/
function addEvent(target,type,handler){
  if(target.addEventListener){
 target.addEventListener(type,handler,fasle);
  }
  else{
    target.attachEvent("on"+type,function(event){
      return handler.call(target,event);
      //把处理程序作为事件目标的方法调用,传递事件对象
    })   
  }
}

在乎运用这一个办法注册的事件管理程序不能去除,因为传递给attch伊芙nt的包裹函数未有保存下去传递给detachEvent。

举个例子mylib2里有另一个同名的类,操作也不会成功。但若在指令后加overwrite子句,原有的 
 
类将被代替。   
主题素材12: 怎么样能不采纳品质窗口而步入容器?   
答案12: 在指标上单击鼠标右键。从弹出菜单中接纳”编辑”。假使您是在   
网格上操作,你必需接纳对象所在的列并使用品质窗口来选你想编辑的特定   
的目标。假设您想采用header类或列的别的的指标,你必须要采取品质窗口。   

lcstr

3.3.事件管理程序的功效域 

它们在其定义时的效用域而非调用时的效用域中实践,而且它们能存取那多少个功效域中的任何叁个地点变量。不过经过HTML属性来注册事件管理程序是二个不相同,它们被更改为能存取全局变量的超级函数而非任何地方变量。然则由于历史原因,它们运营在叁个改换后的机能域链中,通过HTML属性定义的事件管理程序能临近本地变量相像选择对象对象,容器<form>对象(若是有)和Document对象的天性。

HTML属性最不自然之处包涵冗长的代码串和校勘会的效应域链允许有用的急速情势,能够运用tagName代替this.tagName,使用getElementById()代替document.getElementById(卡塔尔(قطر‎。并且,对于<form>中的文书档案成分,能透过ID援用任何其余的表单成分,比方zicode代替this.form.zipcode。

一方面,HTML事件管理程序中期维校正的效果域链是骗局之源,因为效益域链中各个对象的性质在全局对象中都有同一名字的习性。比如Document对象定义(少之又少使用)open(State of Qatar方法,因而HTML事件管理程序想调用Window对象的open方法就亟须出示地调用window.open实际不是open。表单有周围的难题但破坏性越来越大,因为表达元素的名字和ID在蕴藏的表单成分上定义属性。比方表单包含贰个ID是“location”的元素,那么若是表单的具备HTML事件管理程序想引用window的location对象,就务须选择window.location而不能够是location。

标题13: 如何把数组作为参数字传送递给表单?   
答案13: 在foxpro中,数组必需按址传递。set udfparms决定参数的传递方   
式。在暗中同意境况下,当你用do…with调用进度或表单时,参数是按址传递。   
在函数或方法中,参数是按值传递。   
dimension array[10]     
do form form1 with array     
在此种状态下,你必需用二个”@”符号强迫参数的传递为按址传递。   
dimension array[10]   
myform = createobject(“form1”, @myarray)   

” “(自定义属性卡塔尔

3.4.事件管理程序的重回值

经过设置对象属性或HTML属性注册事件管理程序的重临值不常是十二分有含义的。

标题14: 怎样在应用程序中制止现身vfp的窗口标题?   
答案14: 在config.fpw文件中,加”title = 你的标题”行。   
别的, 也得以在主程序中步向:   
_screen.caption=”你的标题”     

cmdset

3.7.平地风波废除

function cancelHandle(event){
  var event = event || window.event;//用于IE
  /*处理事件的代码*/
  //取消默认行为
  if(event.preventDefault)event.preventDefault();
  if(event.returnValue)event.returnValue = false;
  return false;  //用于处理使用对象属性注册的处理程序
}

难点15: 如何幸免vfp的招待显示屏?   
答案15: 在你的神速形式或Logo的前后相继行中,在vfp.exe前边加”-t”(
不要引号)。   

caption

5.鼠标事件

澳门新葡亰网址下载 6

标题16: 在win95中,全部窗口左上角的Logo全部都以fox。笔者能代替他呢?   
答案16: 在你的起先前后相继,到场:   
_screen.icon=”vitus.ico”   
在您的表单的load事件中,参预:   
thisform.icon =”vitus.ico”   
大概在表单设计器的性格窗口中设置它的值。   

安装重返值

7.拖放事件 

 

难点17: 作者何以除掉表单标题条?   
答案17: 把表单的caption属性设置为率性串   
把表单的maxbutton属性设置为.f.   
把表单的minbutton属性设置为.f.   
把表单的movable属性设置为.f.   
在表单的init中写入   
this.caption=’’   

 frmtest2表单的init事件代码如下(用于采用数据):

主题素材18: 事件的触及顺序是怎么的?   
答案18: 在扶持文件中查看 “vfp事件连串”。   
另外,在vfpsamplescontrolsevents目录中,有三个名称叫events.app的 
 
程序演示了不一致指标的平地风波的接触顺序。   

          Lparameters lcstr

问题19: 作者什么检查变量是还是不是留存?   
答案19: 使用type(State of Qatar函数来检查三个变量是还是不是存在。   
if type(“var”) = .t.   
messagebox(“it exists”,0,””)     
endif   
或你能够检查是不是type(“var”卡塔尔=”u”,借使,则变量不设有。   

         this.text1.value=lcstr

标题20: vfp的表的最大容积是不怎么?   
答案20: 2 gb,且在明日版本中该限量大概被吊销。

        this.lcstr=lcstr

cmdset按键的click事件代码如下(用于纠正传递参数,设置重返值):

       thisform.lcstr=thisform.text1.value

frmtest2表单的unload事件代码如下(用于重返数据):

  return thisform.lcstr

 

调用表单test1的装置

对象

属性

text1

value

123456

cmdset

caption

调用表单

 

cmdset按纽的click事件代码(用于参数的传递与重返):

local lcstr

do form test2 to lcstr with thisform.text1.value 
&&(lcstr=>重回的参数  thisform.text1.value=>传递的参数卡塔尔国

thisform.caption=lcstr

 

 

 

转自

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图