2012-09-14 63 views
0

Faceted search with Custom Checkbox如何單擊最近的錨時,我的自定義複選框被切換

HTML

<li class="leaf"> 

    // The span is my custom checkbox that wraps around the default checkbox.  
    <span class="checkbox facetapi-checkbox checked"> 

    // The span above replaces the default checkbox below, which you'll notice has a display:none; I don't want both checkboxes showing. 
    <input type="checkbox" class="facetapi-checkbox" checked="true" style="display: none; "> 

    </span> 


    // This is the anchor tag that I need to click when my custom checkbox is checked. 
    // It's outside of my custom checkbox span, but shares the same parent. 
    <a href="/part-finder/field_rep_catalog/heater-1527" rel="nofollow" class="facetapi-active facetapi-checkbox-processed" style="display: none; ">(-) 
    <span class="element-invisible">Remove Support filter</span> 
    </a> 

</li> 

這裏是jQuery的使用,我自定義的一個來替換默認複選框:

//Checkbox Image Replacement 
$('.faceted_search_column input[type=checkbox]').each(function() { 
    var span = $('<span class="' + $(this).attr('type') + ' ' + $(this).attr('class') + '"></span>').click(doCheck).mousedown(doDown).mouseup(doUp); 
    if ($(this).is(':checked')) { 
    span.addClass('checked'); 
    } 
    $(this).wrap(span).hide(); 
}); 

// You'll notice that when this function is run, I've attempted to use .closest() to find the nearest anchor and then do a .triggerHandler('click') to click that anchor it finds. This obviously didn't work. Should I use .parent() to move back in the DOM? 
function doCheck() { 
    if ($(this).hasClass('checked')) { 
    // This was my attempt to click the anchor when doCheck function is run. 
    $(this).closest('a.facetapi-checkbox-processed').triggerHandler('click'); 
    $(this).removeClass('checked'); 
    $(this).children().prop("checked", false); 
    } else { 
    $(this).parents('a.facetapi-checkbox-processed').triggerHandler('click'); 
    $(this).addClass('checked'); 
    $(this).children().prop("checked", true); 
    } 
} 

function doDown() { 
    $(this).addClass('clicked'); 
} 

function doUp() { 
    $(this).removeClass('clicked'); 
} 

當用戶切換複選框時,你們推薦哪種方式作爲最有效的方式觸發錨點?這是一個分面搜索錨,所以我需要選中或不選中才能觸發相同的錨標記。

在此先感謝那些花時間幫助我的人。

回答

1

最近只看一個元素的直接祖先。您可以使用最接近的('li')和find('a')的組合來實現您的目標。

$(this).closest('li').find('a.facetapi-checkbox-processed').click(); 

TriggerHandler不能上升DOM樹,所以它試圖觸發僅在錨,這沒有觸發綁定到錨標記上的點擊。使用觸發器('click')或簡單地.click()使事件傳播到跨度上的事件處理程序,或更改查找以直接查找跨度。

+0

這沒有奏效。我也嘗試使用.find('a')來查看這是否可行,但沒有運氣:( – HoldTheLine

+0

@HoldTheLine查看更新,查找('a')沒有返回,或者點擊沒有做任何事情? – Rob

+0

你是男人!非常感謝你提供的豐富答案。儘管我無法用你提供的答案取得成功,但是你讓我走上了正確的道路,我能夠通過$(this).closest( 'li')。find('a')。attr('href');非常感謝你Rob! – HoldTheLine

1

您需要更換下面一行:

$(this).closest('a.facetapi-checkbox-processed').triggerHandler('click'); 

這一個:

$(this).siblings('a.facetapi-checkbox-processed').triggerHandler('click'); 
+0

我的感覺是,兄弟必須和選擇器在同一個父元素中。所以輸入[type = checkbox]嵌套在我的jquery創建的中。我猜如果我的錨標籤也嵌套在同一個span元素中,兄弟會起作用嗎? – HoldTheLine

相關問題