0

我试图以内联方式写下这个 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 文件创建了一个“脚本”文件夹。

2) 将构建操作设置为“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)在我的渲染方法中,我添加了这个:

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。

但它不起作用。我在这里忘记了什么吗?

4

1 回答 1

0

事件对象也作为内联代码的参数发送给函数,但由于您没有任何函数声明,因此您需要从arguments集合中获取它而不是作为命名参数。

例子:

Me.Attributes.Add("onkeydown","var e=arguments[0];if(e.keyCode == 13){ alert('enter'); }");
于 2013-08-19T20:38:18.277 回答