2012-12-21 28 views
0

我已经从这个页面编译了两个代码,用于文本字段和下拉菜单。该代码正在工作,除了去到另一个领域后,它不停地跳来跳去。我猜测我的问题必须在某个地方的循环中,但无法找到它。提前致谢! DEMOJavascript - Onblur refocus

function doThisOnBlur() { 
     if (this.value==='') { var ths = $(this); setTimeout(function(){ 
     ths.focus(); 
     }, 1); return false; } 

} 

var inputs = document.getElementsByTagName('input'); 
var selects = document.getElementsByTagName('select'); 

for (var i = 0; i < inputs.length; i++) 
{ inputs[i].onblur = doThisOnBlur; } 
for (i = 0; i < selects.length; i++) 
{ selects[i].onblur = doThisOnBlur; } 
+0

这是做什么的,你告诉它。如果我没有在第一个字段中输入值,并单击第二个字段,则第一个字段执行函数doThisOnBlur,然后第二个字段失去焦点并执行函数doThisOnBlur。他们陷入循环,因为他们都在不断地失去焦点。 –

+0

CM谢谢,我明白了..我该怎么做才能让它留在第一块空间里呢? – Skorpion

回答

1

好吧,我做了一个变化,我认为根据您的jsfiddle会工作。我设置一个全局变量来保存null或当前活动的字段。一旦活动字段获得一个值,那么该变量将被设置为空,并且用户可以继续到下一个字段。

var hasPrecedence = null; 

function doThisOnBlur() { 
    if(!hasPrecedence){ hasPrecedence = this; } 
    if(hasPrecedence != this){ return; } 
    if (this.value==='') { var ths = $(this); setTimeout(function(){ 
    ths.focus(); 
    }, 1); return false; } 
    else{ 
    hasPrecedence = null; 
    } 
} 

+0

非常感谢!有效! – Skorpion

+0

@Skorpion,我很高兴能帮上忙。 –