我试图以内联方式写下这个javascript函数:
function WhichKeyPress(e) {
if (!e) {
//if the browser did not pass the event
//information to the function,
//we will have to obtain it from the
//event register
if (window.event) {
//Internet Explorer
e = window.event;
} else {
//total failure, we have no
//way of referencing the event
return;
}
}
if (typeof (e.keyCode) == 'number') {
//DOM
e = e.keyCode;
} else if (typeof (e.which) == 'number') {
//NS 4 compatible
e = e.which;
} else if (typeof (e.charCode) == 'number') {
//also NS 6+, Mozilla 0.9+
e = e.charCode;
} else {
//total failure, we have no way of obtaining the key code
return;
}
}
它变成了这样的东西:
Me.Attributes.Add("onkeydown","var evt; if(!e){ evt = window.event;}else{return;} if(typeof(evt.keyCode == 'number'){//do something}else if....."}
它继续下去。 不用说它不起作用。我尝试过其他类似的内联javascript函数:
Me.Attributes.Add("onkeydown","if(event.keyCode == 13){return event.keyCode = 9;} ")
有效。但如果我这样做:
Me.Attributes.Add("onkeydown","var cod = event.keyCode; if(cod == 13){return cod = 9;})
它无效。
我能真正编写整个javascript函数内联吗?声明变量和其他所有变量?
编辑:我已经阅读了@millimoose提供的链接,我试图在vs2005中使用我的dll中的外部.js文件,但没有成功。到目前为止我还没有做过:1)在dll解决方案中使用js文件创建了一个'Scripts'文件夹。
2)将Build Action设置为'EmbeddedResource'
3)像这样覆盖我的OnPreRender方法:
Protected Overrides Sub OnPreRender(ByVal e As EventArgs)
Page.ClientScript.RegisterClientScriptResource(Me.GetType(), "webControlesUES.Scripts.EnterToTab.js")
Page.ClientScript.RegisterStartupScript(Me.GetType(), "EnterToTab", "teste()", True)
End Sub
4)在我的Render方法中,我添加了这个:
Me.Attributes.Remove("onkeydown")
Me.Attributes.Add("onkeydown", " teste();")
If Me.TextMode = Web.UI.WebControls.TextBoxMode.MultiLine Then
Me.Attributes.Remove("onkeydown")
End If
5)在我的AssemblyInfo.vb
上添加了这个<Assembly: System.Web.UI.WebResource("webControlesUES.Scripts.EnterToTab.js", "application/x-javascript")>
6)构建解决方案并添加dll进行测试。
但它不起作用。我忘记了什么吗?
答案 0 :(得分:0)
事件对象也作为参数发送给函数也用于内联代码,但由于您没有任何函数声明,因此需要从arguments
集合中提取它而不是作为命名参数。
示例:
Me.Attributes.Add("onkeydown","var e=arguments[0];if(e.keyCode == 13){ alert('enter'); }");