0

我需要找到其他方式来使用 javascript 函数。

var b = ce("input"); // Here I create element.
b.setAttribute("name", "g4");
b.value = "Centimetrais(pvz:187.5)";
b.onfocus = function() { remv(this); };
b.onchange = function() { abs(this); };
b.onkeypress = function() { on(event); }; // I need to change this place becose then I pass "event" argument function doesn't work.
ac(1, "", b); // Here I appendChild element in form.

这是功能:

function on(evt) {
  var theEvent = evt|| window.event;
  var key = theEvent.keyCode || theEvent.which;
  key = String.fromCharCode( key );
  var regex = /^[0-9.,]+$/;
  if( !regex.test(key) ) {
    theEvent.returnValue = false;
    if(theEvent.preventDefault) theEvent.preventDefault();
  }
}

在 IE 和 chrome 中它可以工作,但在 mozilla 中没有。任何替代方法如何为Firefox修复它?

如果传递其他参数,例如“car”,“dog”,this,则在此路径上其他函数在 Mozilla 中工作。例如:

firstFunction();
function firstFunction() {
var b = ce("input"); // Here I create element.
b.onkeypress = function() { on("hi!"); };
ac(1, "", b); // Here I appendChild element in form.
}
function on(evt) {
  alert(evt);
}
4

1 回答 1

0

如果我正确理解您的问题,问题是您不接受主处理程序中的事件参数。例如,在您的第一个示例中:

b.onkeypress = function() { on(event); };

它应该是

b.onkeypress = function(e) { on(e || window.event); };
// Changes here --------^ and --^^^^^^^^^^^^

您在 中这样做on,但是在 中on,已经太晚了,您已经丢失了提供给onXYZ函数的参数。

您的代码在 Chrome 和 IE 中工作的原因是 IE 使用全局event对象而不是(或在现代版本中,除了)它实际传递给处理程序的对象,并且 Chrome 复制该行为以最大程度地与期望的网站兼容. 火狐没有。

于 2013-08-04T11:40:53.990 回答