2016-02-10 64 views
0

爲什麼這不是工作,我怎麼這樣做正確:焦點jQuery的

if ($('#ch03').is(':focus')) { 
    $('this').attr("aria-grabbed","true"); 
} else { 
    $('this').attr("aria-grabbed","false"); 
} 

或基於現有的SO解決方案,我不能去上班

var inFocus = false; 
$('#ch03').focus(function() { 
    $('#ch03').attr("aria-grabbed","true"); 
}); 

$('#ch03').blur(function() { 
    $('#ch03').attr("aria-grabbed","false"); 
}); 

HTML

<div id="activity_contents"> 
<div id="columns" class="clearfix"> 
<div id="col_1" class="column"> 
<div class="column_head">Section A</div> 
    <ul id="tier1" class="connected" role="region" aria-labelledby="col_1" aria-dropeffect="move"> 
    </ul> 
<div class="clearfix"></div> 
</div> 
<div id="col_2" class="column"> 
<div class="column_head">Section B</div> 
    <ul id="tier2" class="connected" role="region" aria-labelledby="col_2" aria-dropeffect="move"> 
    </ul> 
</div> 
<div id="col_3" class="column"> 
<div class="column_head">Section C</div> 
    <ul id="tier3" class="connected" role="region" aria-labelledby="col_3" aria- dropeffect="move"> 
    </ul> 
</div> 
<div id="col_4" class="column last"> 
<div class="column_head">Section D </div> 
    <ul id="tier4" class="connected" role="region" aria-labelledby="col_4" aria-dropeffect="move"> 
    </ul> 
</div> 
</div> 
<div id="well" class="clearfix"> 
    <ul id="choices" class="connected" aria-labelledby="well" role="region"> 
    <li id="ch01" class="choice"><a href="#">Drag item 1</a></li> 
    <li id="ch03" class="choice"><a href="#">Drag item 2</a></li> 
    <li id="ch04" class="choice"><a href="#">Drag item 3</a></li> 
    <li id="ch02" class="choice"><a href="#">Drag item 4</a></li> 
    </ul> 
</div> 
</div> 

感謝您對此問題的任何幫助。代碼來自jQueriUI dragnDrop/Sortable。我試圖實現的是通過動態添加aria角色來使這更容易訪問。

+0

這是指元素,沒有這樣的元素叫做'this'。刪除此處的引號 – DinoMyte

+0

感謝DinoMyte但仍未添加重點屬性 –

+0

什麼類型的元素是「#ch03''? 它是一個div或表單元素(文本,選擇等)。 因爲此方法適用於文本,選擇但不與div –

回答

0

選項1:依靠DOM上的click事件檢查元素是否具有焦點,然後設置屬性aria-grabbed的值。

$(document).on("click",function(){ 
    $("#ch03").attr("aria-grabbed",$("#ch03").is(':focus')); 
}); 

實施例:https://jsfiddle.net/DinoMyte/2oygeh0w

選項2:只需觸發元件上的focusblur事件來設置屬性 'aria-grabbed' 值。

$("#ch03").on("focus",function(){ 
     $(this).attr("aria-grabbed",true); 
    }).on("blur",function() 
    { 
     $(this).attr("aria-grabbed",false); 
    });; 

例子:https://jsfiddle.net/DinoMyte/2oygeh0w/1/

UPDATE:根據您發佈,如果你試圖設置屬性「詠歎調,抓住」對每個重點裏的HTML。

$('#choices li a').on("focus",function(e) 
{ 
    $(this).closest('li').attr("aria-grabbed",true); 
    $(this).addClass("selected"); 

}).on("blur",function(e) 
{ 
     $(this).closest('li').attr("aria-grabbed",false); 
     $(this).removeClass("selected"); 
}); 

例子:https://jsfiddle.net/DinoMyte/2oygeh0w/3/

+0

謝謝DinoMyte但不工作。也許我正在以這種錯誤的方式去做。 –

+0

你可以添加你的HTML的問題? – DinoMyte

+0

沒問題。這對我來說是一個很大的學習曲線:-) –

0

使用DinoMyte的方法,並從sitepoint網站 http://www.sitepoint.com/accessible-drag-drop/

/***** 測試一些代碼

****/

//get the collection of draggable targets and add their draggable attribute 
for(var 
    targets = document.querySelectorAll('[data-draggable="target"]'), 
    len = targets.length, 
    i = 0; i < len; i ++) 
{ 
    targets[i].setAttribute('aria-dropeffect', 'none'); 
} 

//get the collection of draggable items and add their draggable attributes 
for(var 
    items = document.querySelectorAll('[data-draggable="item"]'), 
    len = items.length, 
    i = 0; i < len; i ++) 
{ 
    items[i].setAttribute('draggable', 'true'); 
    items[i].setAttribute('aria-grabbed', 'false'); 
    items[i].setAttribute('tabindex', '0'); 
} 
//Place some dynamic aria roles for accessibility 
$("#ch01").on("focus",function(){ 
    $(this).attr("aria-grabbed",true); 
}).on("blur",function() 
{ 
    $(this).attr("aria-grabbed",false); 
}); 
$("#ch02").on("focus",function(){ 
    $(this).attr("aria-grabbed",true); 
}).on("blur",function() 
{ 
    $(this).attr("aria-grabbed",false); 
}); 
$("#ch03").on("focus",function(){ 
    $(this).attr("aria-grabbed",true); 
}).on("blur",function() 
{ 
    $(this).attr("aria-grabbed",false); 
}); 
$("#ch04").on("focus",function(){ 
    $(this).attr("aria-grabbed",true); 
}).on("blur",function() 
{ 
    $(this).attr("aria-grabbed",false); 
}); 

//end 

仍然需要清理,但這個想法有效。一次一步,我會在你的幫助下到達那裏:-)

+0

您發佈的內容與您正在尋找的內容完全不同。您是否在尋找拖放功能? – DinoMyte

+0

目標,併爲所有的地方感到抱歉,有一個拖放功能,鍵盤訪問。有4個拖動項目和4個拖放區域。一旦用戶將物品拖放到可能的區域,他們點擊一個檢查按鈕,該按鈕告訴/顯示用戶哪些是正確的,哪些是錯誤的。用戶得到3次嘗試。在最後的(第三次)檢查中,物品被移動到正確的放置區域,並且警告用戶原來是正確的,哪些是錯誤的,現在是正確的位置。是的,我知道有點複雜。 –