代码之家  ›  专栏  ›  技术社区  ›  Webking

从a href onclick加载jquery函数

  •  0
  • Webking  · 技术社区  · 16 年前

    我有一个HTML表,每行有一列,其中包含此HTML代码 <td></td> 标签:

     <a onclick="modalDialog(this); return false;" href="javascript:void(0)">17795</a>
        <div style="display: none;" class="MessageDataDiv">
         some text to show up in my jquery modal window when function modaldialog is clicked.
        </div>
    

    以及jquery函数,当 onclick 在一个 href 链接

    function modalDialog(event) {
            $('a.message').click(function () {
             var div = new $(this).closest("td").find(".MessageDataDiv").clone();
             div.show().dialog();
              event.preventDefault();
            });
        }
    

    如何编写jquery函数,使该函数在单击链接时只触发一次?我需要将jquery函数modaldialog作为一个单独的函数,因为HTML表使用Ajax部分呈现。

    问题是,当我单击a href链接时,第一次什么也没有发生,第二次单击链接时,我会看到两个模式对话框,第三次单击时,我会看到三个模式对话框,等等…

    3 回复  |  直到 8 年前
        1
  •  1
  •   Keeper    16 年前

    我认为最简单的方法是使用一个单独的DIV来显示所有其他文本。

    <div id="MessageDataDiv"></div>
    
    <script>
    $(function() {
      $('#MessageDataDiv').dialog({ autoOpen: false });
    });
    function modalDialog(a) {
      if($(a).data('clicked')) return false;
      $(a).data('clicked', true);
      $('#MessageDataDiv').html($(a).next().text()).dialog();
      return false;
    }
    </script>
    

    这样,您不必每次打开对话框时都创建。

        2
  •  1
  •   Russ Clarke    16 年前

    你可以用这样的东西;

    第一条目:

      function modalDialog(event) {
        if (!$(document).data("clicked"))
        {
          $(document).data("clicked", true);
          $('a.message').click(function () {
            var div = new $(this).closest("td").find(".MessageDataDiv").clone();
            div.show().dialog();
            event.preventDefault();
          });
        }
      }
    

    您还可以使用“return false”;而不是激发event.preventDefault();

        3
  •  1
  •   cletus    16 年前

    我会以不同的方式来做。我将从这样的标记开始:

    <div class="message">
      <a href="#">17795</a>
      <div>some text to show up in my jquery modal window when function modaldialog is clicked.</div>
    </div>
    

    CSS:

    div.message > div { display: none; }
    

    JS:

    $("div.message > a").one("click", function() {
      $(this).next().dialog();
      return false;
    });