2011-09-23 144 views
2

我试图捕捉如下回车键,捕获回车键

$("#txt1").keypress(function(event){ 

if(event.which==13) //Also tried using event.keycode 
    $("#add").load("newjsp.jsp?q="+this.value) 
}) 

但每次我按回车,该文本被擦除和形式(#将)它应该不显示。我怎样才能做到这一点?

我也遇到下面的代码中的问题,

 $("#txt1").keyup(function(event){ 

      $("#add").load("newjsp.jsp?q="+this.value) 
     }) 

<form> 
    Comment: <input type="text" id="txt1"></input> 
</form> 
     <p><p></p></p> 
      <form id="add"> 
      </form> 

当我运行此代码,在文本框中的文本被添加到我的形式(#add),但我按下空格键,文本被删除(从#add表单而不是从文本框),然后不再添加文本。我尝试过使用​​和keypress,但仍然存在相同的问题。我无法理解问题所在,因为this.value在文本框中提供了完整的值!包括空格。

回答

2

您的第一个示例是正确的。除非你按下'enter'后需要防止事件冒泡。按默认输入提交表单。 FinalFrag是正确的空间

$('#txt1').keypress(function(e){ 
    if (e.which===13) { 
     e.preventDefault(); 
     e.stopImmediatePropagation(); 
     $("#add").load("newjsp.jsp", {q: $(this).val()}); 
    } 
}); 

*编辑以反映Tomalak的评论。

+2

更好:'$( “#加”)负载( “newjsp.jsp”,{Q:$(本).VAL()});' – Tomalak

+0

是。那更好! – rooney

2

THIS.VALUE确实会增加按键负载请求。但是,您的浏览器可能会请求的URL转向“Q =你好”修剪空间关闭到“Q =你好”

您在申请使用它之前,您应该逃避值。

看看的JavaScript escape()函数在这里:http://www.w3schools.com/jsref/jsref_escape.asp

+1

我认为你应该使用encodeURIComponent方法 –

+0

@Final:'逃生()'是绝对错误的。使用'encodeURIComponent()'。 – Tomalak

+0

谢谢兄弟!...现在效果很好。那么,我的浏览器不能正确理解或解释文本,即空间?因为当我在JavaScript中编写相同的代码时,它曾经很好地工作而不会转义它。使用innerHTML它会覆盖以前的内容与现有的内容。 – Rishabh

0

对于第二个问题,你应该使用encodeUricomponent()编码值,这样就可以在URL中使用它们:

$("#txt1").keyup(function(event){ 

     $("#add").load("newjsp.jsp?q="+encodeURIComponent(this.value)); 
    }) 

对于第一个问题,您应该防止默认操作并停止传播:

$('#txt1').keypress(function(e){ 
    e.preventDefault(); 
    e.stopImmediatePropagation() 
    if (e.which===13) { 
     $("#add").load("newjsp.jsp?q=" + $(this).val()); 
    } 
}); 
+0

此代码捕获回车键不起作用,我不能够在文本框中输入文字。 – Rishabh

+0

您是否检查此代码是否为Enter事件运行? – Rishabh