2012-07-12 67 views
1

我是相当新的JS和jQuery。基本上,我希望能够从onClick事件或附加到<a>这样我可以用PHP以后修改的变量东西更改表和id变量。这只是概念证明,并且因为我做了修改似乎并没有工作。有没有一种方法可以将变量从a传递给函数?jQuery UI的动态对话框

总体目标:我想要一个内联onclick,它将从loadMe传递id和表名到函数并显示table_render.php?id = someid & table = sometable在对话框中。

<script> 
    $(function loadMe(table, id) { 
     $("#dialog-view").dialog({ 
      autoOpen: false, 
      height: 600, 
      width: 700, 
      modal: true, 
      buttons: { 
       Cancel: function() { 
        $(this).dialog("close"); 
       } 
      } 
     }); 
     $("#create-view").click(function() { 
      $("#dialog-view").load("table_render.php?id=" + id + "&table=" + table + "").dialog("open"); 
     }); 
    }); 
    </script> 
    <a href="" id="create-view" onClick="loadMe(testimonials,1)">Some text</a> 
    <div id="dialog-view" title=""> 
    </div> 
+0

我很困惑:看起来你已经逝去的两个变量(推荐1 )? – machineghost 2012-07-12 23:57:29

+0

是的。表名和ID。只是概念验证,所以我可以将它实现到我的PHP。 – Alex 2012-07-12 23:57:54

+0

对,所以你的示例代码已经传递了两个变量,但你的问题是“是否有一种方法可以将变量从a传递给函数?” ......这没有意义。为什么你需要知道如何去做明确已经知道该怎么做的事情(因为你正在做)? – machineghost 2012-07-12 23:58:53

回答

1

您正在通过onclick和jQuery一次连接事件两次。你需要选择一个。

如果你选择了jQuery的方式(推荐),你会得到jQuery的参数(这只是一个ARG,事件)。但是,jQuery会将this设置为触发事件的元素(在本例中为您的A标记)。您可以使用它从A标签获取数据。

举例来说,如果你想要得到点击的在A的ID,你可以在你的处理器做到这一点:如果你想存储一些任意信息

var clickedId = $(this).attr('id'); 

(如“表名”。)为每个A标签,你可以使用HTML 5的数据属性(最好),或者只是组成你自己的属性(这将起作用,但是“坏形式”)。例如:

<a tableName='testimonials'> 

var clickedFoo = $(this).attr('tableName'); 

或(好一点):

<a data-tableName='5'> 

var clickedTableName = $(this).attr('data-tableName'); 
// Also, I believe this would work: 
var clickedTableName = $(this).data('tableName'); 

*编辑*

只是为了尝试和澄清远一点,基本的总体思路是这样的:

1)您通过PHP写出您的A标签,通过PHP

1A)当你把它们写出来,你把什么数据是针对他们在一个标记,在属性或属性(例如形式。 id='foo' data-bar='baz')。

2)您也写了一些JavaScript代码,说:“哎,每当一个标记被点击,运行该功能”

3)在函数内部,你迷上了A标签的点击事件,你使用this变量(它指向的标签本身)来获取数据,你需要

3A(以下简称“变量”))。例如,你可以使用JQuery的“ATTR”的方法:$(this).attr('id')

4)利润! (或至少做一些与你刚刚得到了有用的数据)

+0

我知道如何做到这一点。但为了弄清楚是什么问题,我简化了它,所以我现在不必处理w php。 – Alex 2012-07-13 00:01:39

+0

P.S.如果表格名称是您可以在DOM中找到的东西,那么您可以用这种方式取而代之;例如你可以执行'$(this).parents('table:first')。attr('name');' – machineghost 2012-07-13 00:08:29

+0

PPS将数据存储在DOM中可能对你来说是最方便的事情(特别是作为PHP-er ),但是就通用的JS设计而言,你几乎肯定会更好地将这些数据以某种方式存储在Javascript中。 – machineghost 2012-07-13 00:09:38

0

,你可能想要把$(document).ready()你周围的功能初始化对话框并结合onclick事件。然后在你的ajax请求的回调中打开对话框。

这种方法你可以辞退与loadFunction onclick属性,我猜。(累)

类似:

HTML:

<a href="#" id="trigger" data-my-id="123" data-my-table="myTable"> 
    trigger 
</a> 

<div id="dialog"> 
Dialog Contents.... 
</div> 

JS:

$(document).ready(function() { 


    $("#dialog").dialog({ 
     autoOpen: false, 
     height: 600, 
     width: 700, 
     modal: true, 
     buttons: { 
      Cancel: function() { 
       $(this).dialog("close"); 
      } 
     } 
    }); 

    $("#trigger").click(function() { 

     var id = parseInt($(this).attr('data-my-id'); 
     var table = $(this).attr('data-my-table'); 

     $("#dialog").load("table_render.php?id=" + id + "&table=" + table + "", 
      function(){ 
      $("#dialog").dialog("open"); 
      }); 
    }); 

});​ 

应该做的伎俩。

+0

好吧,我明白你在做什么。但我如何将我的ID和表格从内嵌的onclick传递给此? – Alex 2012-07-13 00:16:57

+0

你可以将它们存储在数据属性中,而不是在conclick中,并使用jquerys'attr()'访问它们(编辑答案) – 2012-07-13 06:20:49

+0

这就是@machine上面所说的。但我更愿意按照我作为答案发布的方式进行操作。为简单起见 – Alex 2012-07-13 14:17:52

0

,所以我得到它的工作...继承人的解决方案

function createViewer(id, table) { 
     var id; 
     var table; 
     $("#dialog-view").dialog({ 
      autoOpen: false, 
      width:650, 
      minHeight:400, 
      show:{effect: "fade", duration: 500}, 
      hide:"clip", 
      resizable: false, 
      modal: true, 
      buttons: { 
       "Close": function() { 
        $(this).dialog("close"); 
       } 
      } 
     }); 
     $("#dialog-view").load("table_render.php?id=" + id + "&table=" + table + "").dialog("open"); 
    }; 

而内嵌代码

<a href="#" onMouseDown="createViewer(<?php echo $row_testimonials['id'];?>,'testimonials');">View Quote</a>