2009-10-26 64 views
0

我需要触发输入更改事件,但前提是该值发生更改。我需要从键盘事件中完成。有没有一种方法可以调用浏览器的更改机制,它将触发更改事件触发,或者不取决于值是否被修改?模糊输入更改事件

例子:

User clicks on an input field 
User does not modify value of the field 
user presses a key causing the input field to blue 
onchange does not get triggered. 

VS

User clicks on an input field 
User modifies the value of the field 
user presses a key causing the input field to blue 
onchange gets triggered.  

这可能吗?或者我需要执行onfocus保存值,onblur比较,并可能调用onchange,但前提是没有调用onchange,因为用户只是通过点击vs指向键盘触发器而导航。

回答

1

它的关键是什么?如果该键不是标准输入键,则设置onchange以检查该字段是否改变字段。

你也可以绑定一个onkeypress做文件,并返回:false;当按下将输入更改为蓝色的按键时。

多一点情况可以帮助。

+0

基本上,当我按下输入字段上的输入时,我通过关注下一个输入字段来模拟Tab键按下(不要辩论这个问题)。不过,如果输入元素更改值,我需要更改处理程序。只专注于下一个字段不会调用浏览器的内置更改机制。 对下一个字段使用jQuery.focus()或对当前使用.blur()不触发更改处理。我需要手动调用.change(),但我不希望在值未更改时发生这种情况,并且我不希望在用户单击另一个字段以调用它时调用两次。 – 2009-10-26 22:43:16

+1

您是否尝试过该领域本身的onchange处理程序 - http://www.w3.org/TR/html401/interact/scripts.html#adef-onchange? – Cebjyre 2009-10-26 23:23:10

+0

我正在使用jQuery 1.2.6进行事件处理。我会进一步尝试。 – 2009-10-27 14:19:49

1

如果我得到你的权利,你需要两个变量记住输入的过去和当前状态,以及监听器来处理互动:

<html> 
<head> 
<script language="javascript"> 
var startFieldValue = "Some value, possibly value of input when it is loaded"; 
var endFieldValue = ""; 
var focusFlag = 0; 
function interact(keyEvent) { 
    if(focusFlag == 1) 
     return true; 
    var key = keyEvent.keyCode? keyEvent.keyCode : keyEvent.charCode 
    if(String.fromCharCode(key) == "a") { 
     if(startFieldValue != endFieldValue) { 
      var elem = document.getElementById('input-to-be-changed'); 
      elem.style.backgroundColor = "blue"; 
      startFieldValue = endFieldValue; 
     } 
    } 
} 
</script> 
</head> 
<body onkeypress="interact(event);"> 
<input id="input-to-be-changed" onchange="endFieldValue = document.getElementById('input-to-be-changed').value;" onfocus="focusFlag = 1;" onblur="focusFlag = 0;"> 
</body> 

刚阅读以前的帖子的评论,你应该有全球尽管如此,但是发生了什么的想法。更改将删除检查焦点,并将列表程序(onkeypress)放入每个输入内。函数交互应该采用2个值 - 输入的事件和ID以便下一个焦点。另外聚焦新的元素应该改变startFieldValue。对不起,不写代码本身,但它有点晚,我真的需要一些睡眠。

+0

我的问题是:我可以轻松记住以前的焦点值,然后再次检查模糊的值,如果更改手动调用更改事件。不过,我需要确保由鼠标交互引起的模糊触发的常规更改事件不会导致2次更改事件触发。 – 2009-10-27 14:15:44

+0

我猜想在用键盘模糊输入之后(输入引起下一个输入的焦点),onblur将不会再被触发。只需使用onkeypress进行聆听,然后让onblur不做任何事情,将其留空。如果您需要在常规鼠标单击其他输入时使用相同的交互方式,那么您只需使用这两个变量来计算字段值。完成交互事件后,脚本将startFieldValue更改为EndFieldValue。如果它们是相同的,即没有任何改变或功能已完成该输入刚才,代码将不会触发(它的行“if(startFieldValue!= EndFieldValue){“ – 2009-10-27 14:41:55

-3

不要使用jQuery blur()和focus()方法,而是使用原始Javascript。例如:jQuery(selector)[0] .blur(); 就我而言,jQuery的方法仅适用于Opera浏览器。

+1

jQuery是为了让开发人员不必担心浏览器的怪异,所以它应该适用于所有的浏览器,所以不知道你来自哪里? – Skuld 2012-02-13 15:42:00