Javascript 如何在切换“我的自定义”复选框时单击最近的定位点

Javascript 如何在切换“我的自定义”复选框时单击最近的定位点,javascript,jquery,Javascript,Jquery,HTML //范围是围绕默认复选框的自定义复选框。 //上面的span替换了下面的默认复选框,您会注意到它的显示:none;我不希望两个复选框都显示。 //这是选中自定义复选框时需要单击的锚定标记。 //它不在我的自定义复选框范围内,但共享同一个父项。 以下是用于将默认复选框替换为自定义复选框的jQuery: //Checkbox Image Replacement $('.faceted_search_column input[type=checkbox]').each(functio

HTML

  • //范围是围绕默认复选框的自定义复选框。 //上面的span替换了下面的默认复选框,您会注意到它的显示:none;我不希望两个复选框都显示。 //这是选中自定义复选框时需要单击的锚定标记。 //它不在我的自定义复选框范围内,但共享同一个父项。
  • 以下是用于将默认复选框替换为自定义复选框的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');
    }
    
    //复选框图像替换
    $('.faceted_search_column input[type=checkbox]')。每个(函数(){
    变量span=$('')。单击(多切克)。鼠标向下(多道)。鼠标向下(多道);
    如果($(this).is(':checked')){
    span.addClass('checked');
    }
    $(this.wrap(span.hide());
    });
    //您会注意到,在运行此函数时,我尝试使用.nextest()查找最近的锚点,然后使用.triggerHandler('click')单击它找到的锚点。这显然不起作用。我应该使用.parent()在DOM中向后移动吗?
    函数doCheck(){
    if($(this).hasClass('checked')){
    //这是我尝试在运行doCheck函数时单击锚定点。
    $(this).closest('a.facetapi-checkbox-processed').triggerHandler('click');
    $(this.removeClass('checked');
    $(this.children().prop(“选中”,false);
    }否则{
    $(this).parents('a.facetapi-checkbox-processed').triggerHandler('click');
    $(this.addClass('checked');
    $(this.children().prop(“选中”,true);
    }
    }
    函数doDown(){
    $(this.addClass('clicked');
    }
    函数doUp(){
    $(this.removeClass('clicked');
    }
    
    当用户切换复选框时,你们推荐哪种最有效的方式触发锚定点击?这是一个分面搜索锚,所以我需要选中或不选中两者来触发相同的锚标记


    提前感谢那些花时间帮助我的人。

    您需要更换以下线路:

    $(this).closest('a.facetapi-checkbox-processed').triggerHandler('click');
    
    对于这一个:

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

    最近的仅查看元素的直接祖先。您可以使用最近('li')和查找('a')的组合来实现您的目标

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

    TriggerHandler不会在dom树上冒泡,因此它只尝试触发对锚的单击,而锚标记没有绑定触发器。使用trigger('click')或simply.click()将事件传播到span上的事件处理程序,或更改find以直接查找span。

    我的印象是同级必须与选择器位于同一父元素中。因此输入[type=checkbox]嵌套在我创建的jquery中。我猜,如果我的锚标记也嵌套在同一个span元素中,那么同级会起作用吗?这不起作用。我还尝试使用.find('a')来查看这是否有效,但没有成功:(@holdthline-see-update,是find('a'))不返回任何内容,或者单击不起任何作用?您就是那个人!非常感谢您提供的信息性回复。虽然我无法成功获得您提供的答案,但您让我走上了正确的道路。我能够使用$(this.nest('li')。find('a')。attr('href');非常感谢Rob!
     $(this).closest('li').find('a.facetapi-checkbox-processed').click();