【问题标题】:jquery: How can I trigger click() without editing the element state?jquery:如何在不编辑元素状态的情况下触发 click()?
【发布时间】:2010-05-03 22:51:18
【问题描述】:

我需要触发一个分配给复选框的点击函数,但实际上并没有改变它的选中状态(click() 所做的)。

场景:我有一个带有多个复选框的表单,选中这些复选框时会显示一个文本区域。这工作正常,但我还需要调用 $(document).ready() 上的 click() 函数

我的代码如下,请注意我对更改生成的 html 的访问权限非常有限。我有一个对象(admin_panels),它将存储每个复选框和它应该显示的 texarea。

var admin_panels = {"checkbox-id" : "textarea-id"};

$(document).ready(function(){
for (var elem in admin_panels) {
    $("#" + elem).click(admin_slide);
    // $("#" + elem).click();
}
})
function admin_slide() { 
    if ($(this).is(":checked")) {
        $("#" + admin_panels[this.id] + "-wrapper").slideDown();
  }else{
        $("#" + admin_panels[this.id] + "-wrapper").slideUp();
    }
}

谢谢

【问题讨论】:

    标签: jquery


    【解决方案1】:

    如果你想为一个元素调用admin_slide函数,你可以这样做:

    admin_slide.call(domElement);
    

    admin_slide 函数中this 的值将设置为domElement

    在这种情况下,domElement 可以是 $('#'+elem)[0]document.getElementById(elem)

    编辑

    另一种专门使用 jQuery 方法的方法是:$(selector).each(admin_slide)。所以你的代码可能是:

    for (var elem in admin_panels) {
        $("#" + elem).click(admin_slide)
                     .each(admin_slide);
    }
    

    【讨论】:

      【解决方案2】:

      为防止复选框状态发生变化,请在您的事件处理程序代码中包含 event.preventDefault。与 interjay 的答案将如下所示:

      $("#" + elem).click(function(event) {
          event.preventDefault();
          admin_slide.call(this);     
      });
      

      这种方法唯一的缺点是复选框的状态在调用 admin_slide() 时会发生变化,但之后又会变回来。您可以通过更改 admin_slide 函数中发生的事情来轻松解决这个问题。

      function admin_slide() { 
          if ($(this).is(":checked")) {
              $("#" + admin_panels[this.id] + "-wrapper").slideUp();
          }else{
              $("#" + admin_panels[this.id] + "-wrapper").slideDown();
          }
      }
      

      【讨论】:

      • 这不会让状态每次都改变吗?
      【解决方案3】:

      那么,您在 document.ready 中分配点击功能了吗?除了分配事件处理程序之外,为什么不直接调用 admin_slide 呢?

      【讨论】:

      • 这作为注释会更好,因为admin_slide 依赖于将this 设置为正确的元素,直接调用该函数无法完成。
      猜你喜欢
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-23
      相关资源
      最近更新 更多