【问题标题】:I am trying to run a javascript function off a return keystroke however my syntax is wrong我正在尝试通过返回键运行一个 javascript 函数但是我的语法是错误的
【发布时间】:2013-10-03 17:22:38
【问题描述】:

我在执行我的 javascript 时遇到问题我对 javascript/jquery 非常陌生,并且可能有错误的语法。我的 IE8 浏览器不喜欢我的代码,并说“属性 'returnScript' 的值为 null 或未定义不是函数对象,我哪里出错了?

<input id="keyword_box_sub" class="ac_input" type="text" value="" onfocus="if is.value == 'Search for products' ||this.value == 'Enter keyword or item #' ) {this.value = ''; $('#keyword_box_sub').removeClass('ac_input error').addClass('ac_input');}" onblur="if(this.value == '') {this.value = 'Search for products'; }" autocomplete="off" onkeypress="returnScript(event);">



$(keyword_box_sub).onkeypress=function returnScript(event);

function returnScript(event) {
    if (event.which == 13 || event.keyCode == 13) {
        getSearchSubString(); 
        return false;
    }
    return true;
});

【问题讨论】:

  • 这是我的电话
  • 去掉第一行的functionevent
  • 只需编辑您的问题并添加 cmets 中的代码以帮助其他人!
  • @Joren 这还不够。

标签: javascript jquery html function syntax


【解决方案1】:

正确的语法是:

$(keyword_box_sub)[0].onkeypress = returnScript;

或者:

$(keyword_box_sub)[0].onkeypress = function(e) {
    returnScript(e);
});

或者

$(keyword_box_sub).keypress(returnScript);

或者

$(keyword_box_sub).keypress(function(e) {
    returnScript(e);
});

基本上,添加() 会立即调用该函数。因此,当您希望函数作为参数时,删除那些 () 并仅引用函数名称。

【讨论】:

  • 我很确定前两个例子会失败,不是吗?不应该是$(selector)[0].onkeypress = function(){}吗?
  • 是的,是的,忘记了我需要引用0 对象,感谢@kapep -- 已编辑。
【解决方案2】:

你是对的。你的语法应该是这样的:

$(keyword_box_sub).on('keypress', function (event) {
  returnScript(event);
});

【讨论】:

  • 所以从输入框的id中删除我的onkeypress属性?还有
  • 是的。为了组织和效率,使用 JavaScript 而不是在 html 属性中指定事件处理总是更好。你真正应该做的是将所有这些事件属性移动到jQuery事件处理程序中。
  • 我删除了它,但它仍然无法使用 IE8 ,它是否重要的​​是页面上有一个单独的 div 和一个单独的类中的 sae id?或否这意味着所有 Keyword_box_sub 将在事件触发正确时运行该函数?
  • 是的,这很可能是问题所在。页面上的所有 ID 都应该是唯一的。任何两个元素都不应该具有相同的 ID。
猜你喜欢
  • 1970-01-01
  • 2010-10-16
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 2020-04-26
相关资源
最近更新 更多