jQuery - unbind或rebind hoverIntent()?

时间:2011-11-16 11:57:19

标签: jquery unbind hoverintent

我有一个菜单栏,在上排显示一组类别。

其中一个类别有一组子类别。

我有一个hoverIntent设置,以便它会滑动子菜单,并在鼠标离开时滑动。

但是,如果我正在查看此类别中的页面,我希望子菜单在突出显示活动类别时可见。我还想确保当子菜单通过鼠标进行交互时,一旦鼠标离开,它就不会再次滑动。

我已尝试在此页面中的元素上重新声明hoverIntent函数,但它不起作用,它仍然使用以前的绑定。有没有办法取消绑定以前的hoverIntent并确保它使用新的?

4 个答案:

答案 0 :(得分:19)

绑定和取消绑定您应该执行的hoverIntent

// bind the hoverIntent
$("#demo1 li").hoverIntent(makeTall, makeShort)
// unbind the hoverIntent
$("#demo1 li").unbind("mouseenter").unbind("mouseleave");
$("#demo1 li").removeProp('hoverIntent_t');
$("#demo1 li").removeProp('hoverIntent_s');
// rebind the hoverIntent
$("#demo1 li").hoverIntent(makeTall, makeShort)

答案 1 :(得分:12)

我认为这是一个更完整的答案。它执行以下操作:

  • 清理任何活动的计时器。
  • 清除所有活动
  • 清除所有对象属性
  • 使用常见的jQuery语法,看起来像hoverIntent
  • 的原生部分

代码:

(function($) {
   if (typeof $.fn.hoverIntent === 'undefined')
     return;

   var rawIntent = $.fn.hoverIntent;

   $.fn.hoverIntent = function(handlerIn,handlerOut,selector) 
    {
      // If called with empty parameter list, disable hoverintent.
      if (typeof handlerIn === 'undefined')
      {
        // Destroy the time if it is present.
        if (typeof this.hoverIntent_t !== 'undefined') 
        { 
          this.hoverIntent_t = clearTimeout(this.hoverIntent_t); 
        }
        // Cleanup all hoverIntent properties on the object.
        delete this.hoverIntent_t;
        delete this.hoverIntent_s;

        // Unbind all of the hoverIntent event handlers.
        this.off('mousemove.hoverIntent,mouseenter.hoverIntent,mouseleave.hoverIntent');

        return this;
      }  

      return rawIntent.apply(this, arguments);
    };  
})(jQuery);

答案 2 :(得分:1)

来自jQuery docs:“在最简单的情况下,没有参数,.unbind()会删除附加到元素的所有处理程序”

答案 3 :(得分:0)

我用过:

    string logPath = Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.Desktop), "Yokoso Log\\Yokoso Log");

    int count = 1;
    while (File.Exists(logPath))
    {
        logPath = logPath + "(" + count.ToString() + ").txt";
        count++;
    }

    using (TextWriter txtwrite = new StreamWriter(logPath))
    {
        for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
        {
            for (int j = 0; j < dataGridView1.Columns.Count; j++)
            {
                txtwrite.Write("\t" + dataGridView1.Rows[i].Cells[j].Value.ToString() + "\t" + "|");
            }
            txtwrite.WriteLine("");
            txtwrite.WriteLine("____________________________________________________________________");
        }
    }
    MessageBox.Show("Log create successfully (directory desktop).");