2011-09-09 98 views
1

我正在测试键盘导航,但随着我在下拉列表中移动它索引更改本身,我的意思是如果它的值是A,因为我们通过键盘集中它,它的值将变成B.停止事件传播焦点JQuery

我用这个来阻止这个,但仍然没有运气。

e.preventDefault(); 
e.cancelBubble = true; 
return false; 

这里是整个导航脚本。

<script type="text/javascript"> 
var _parent; 
var _selectedIndex = 0; 
$(document).ready(function() { 

    $("input.flat,select.flat").click(function(){ 

     $("input.flat,select.flat").each(function(){ 
      $(this).removeClass('active_ele'); 
     }); 

     $(this).addClass('active_ele'); 

    }); 


    $("select.flat").bind('focus',function (e) { 

     //e.preventDefault(); 
     //e.focus(); 
     //return false; 
     //e.cancelBubble = true; 
     //return false; 
    }); 

    $("input.flat,select.flat").bind('keydown',function (e) { 

     switch(e.keyCode) 
     { 
      case 37: 
       /////Right 
       _parent = $(this).parent().prev(); 

       if(_parent.hasClass('combo')) ///this is select 
       { 
        $(this).removeClass('active_ele'); 
        nNode = _parent.children("select.flat"); 
        nNode.addClass('active_ele'); 
        _selectedIndex = nNode[0].selectedIndex; 
        nNode[0].focus(); 
        nNode[0].selectedIndex = _selectedIndex; 

       } 
       else if(_parent.hasClass('inputBox')) ///this is select 
       { 
        $(this).removeClass('active_ele'); 
        nNode = _parent.children("input.flat"); 
        nNode.addClass('active_ele'); 
        nNode.focus(); 

       } 


      break; 

      case 39: 
      //////////Left 

       _parent = $(this).parent().next(); 

       if(_parent.hasClass('combo')) ///this is select 
       { 
        $(this).removeClass('active_ele'); 
        nNode = _parent.children("select.flat"); 
        nNode.addClass('active_ele'); 
        _selectedIndex = nNode[0].selectedIndex; 
        nNode[0].focus(); 
        nNode[0].selectedIndex = _selectedIndex; 
       } 
       else if(_parent.hasClass('inputBox')) ///this is select 
       { 
        $(this).removeClass('active_ele'); 
        nNode = _parent.children("input.flat"); 
        nNode.addClass('active_ele'); 
        nNode.focus(); 
       } 


       break; 

      case 40: 
       /////Down 
       _nNode = $(this).parent(); 
       _index = _nNode.attr('data'); 

       _index = parseInt(_index) + 1 
       ///td 
       _nNode = _nNode.parent() 
        .next() 
        .children(0)[_index]; 

       _nNode = $(_nNode); 

       if(_nNode[0]) 
       { 
        if(_nNode.hasClass('combo')) 
        { 

         _nNode = _nNode.children("select.flat"); 
         _nNode.addClass('active_ele'); 
         $(this).removeClass('active_ele'); 
         _selectedIndex = _nNode[0].selectedIndex; 
         _nNode[0].focus(); 
         _nNode[0].selectedIndex = _selectedIndex; 

        } 
        else if(_nNode.hasClass('inputBox')) 
        { 
         _nNode = _nNode.children("input.flat"); 
         _nNode.addClass('active_ele'); 
         $(this).removeClass('active_ele'); 
         _nNode.focus(); 
        } 
       } 


       break; 

      case 38: 
      /////Up 
        _nNode = $(this).parent(); 
       _index = _nNode.attr('data'); 
        _index = parseInt(_index) + 1 
       ///td 
       _nNode = _nNode.parent() 
        .prev() 
        .children(0)[_index]; 
       _nNode = $(_nNode); 
       if(_nNode[0]) 
       { 
        if(_nNode.hasClass('combo')) 
        { 

         _nNode = _nNode.children("select.flat"); 
         _nNode.addClass('active_ele'); 
         $(this).removeClass('active_ele'); 
         _selectedIndex = _nNode[0].selectedIndex; 
         _nNode[0].focus(); 
         _nNode[0].selectedIndex = _selectedIndex; 
        } 
        else if(_nNode.hasClass('inputBox')) 
        { 
         _nNode = _nNode.children("input.flat"); 
         _nNode.addClass('active_ele'); 
         $(this).removeClass('active_ele'); 
         _nNode.focus(); 
        } 
       } 
       break; 

      case 46: 
       $(this).val(""); 
     } 

     e.preventDefault(); 
     e.cancelBubble = true; 
     return false; 


    }); 
}); 

</script> 

链接到文件,PLZ提出了一个解决方案,如何阻止这个索引改变。 http://69.175.126.242/~develope/younussal/test/test.htm

感谢

回答

3

尝试e.stopPropagation();

这是jQuery的文档中:http://api.jquery.com/event.stopPropagation/

+0

我已经将它放在keydown绑定事件的底部,但仍然在我导航时索引更改。并在控制台e.stopPropogation()上引发错误;是不是一个功能,谢谢 – MZH

+0

指数仍在改变,通过保存上述链接并附加e.stopPropogation()来检查它。在事件的底部感谢你 – MZH

+0

它不工作它会引发错误e.stopPropogation();是不是一个函数 – MZH

0

我遇到了同样的问题:

我使用的黑客是模糊它

node.addEventListener('focus',function(){this.blur();},false); 
+0

当我使用此代码时,模糊不起作用。 $( “select.flat”)结合( '焦点',函数(E){ \t \t \t \t this.blur(); \t \t返回FALSE;}); – MZH

+0

我不能从下拉列表中定位到下一控制 – MZH

+0

这也没有工作$( “select.flat”)。绑定( '专注',函数(E){ \t \t \t \t //警报(_selectedIndex) ; \t \t //console.log(this.selectedIndex + 'VAL: '+ THIS.VALUE +'' + _selectedIndex); \t \t \t \t \t \t this.selectedIndex = _selectedIndex; \t \t即的preventDefault(); \t \t //e.focus(); \t \t //返回false; \t \t e.cancelBubble = true; \t \t e.stopPropogation(); \t \t return false; \t}); – MZH

-1

使用“TAB”键在控件之间移动而不是箭头键(标准键盘导航)。

不要拦截箭头键,您需要它们更改控件中的值(选择框中的选定项目)。

浏览器和操作系统应该已经为您完成了大部分工作。

+0

谢谢,但我需要使用箭头键,其工作,但它会更改下拉值。 – MZH