1

我对 js 和 jquery 还很陌生。我基本上希望能够从 onClick 事件或附加的东西中更改 table 和 id 变量,<a>这样我以后可以用 php 修改变量。这只是概念证明,自从我进行修改后似乎没有工作。有没有办法可以将变量从 a 传递给函数?

总体目标:我想要一个内联 onclick,它将 id 和表名从 loadMe 传递给函数并在对话框中显示 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>
4

3 回答 3

1

您将连接事件两次,一次通过 onclick,一次通过 jQuery。你需要选择一个。

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

例如,如果您想要被点击的 A 的 ID,您可以在处理程序中执行此操作:

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

如果您想为每个 A 标记存储一些任意信息(例如“tableName”),您可以使用 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 标签写到页面上

1A) 当你把它们写出来时,你把它们特有的任何数据放在 A 标签上,以一个或多个属性的形式(例如id='foo' data-bar='baz')。

2) 你还写了一些 Javascript 代码,上面写着“嘿,只要 A 标签被点击,就运行这个函数”

3) 在您连接到 A 标签的点击事件的函数中,您使用this变量(指向 A 标签本身)来获取您需要的数据(“变量”)

3A) 例如,您可以使用 JQuery "attr" 方法:$(this).attr('id')

4)利润!(或者至少对你刚刚获得的数据做一些有用的事情)

于 2012-07-13T00:00:08.627 回答
1

所以我让它工作了......这是解决方案

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>
于 2012-07-13T01:41:42.143 回答
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");
          });
    });

});​

应该做的伎俩。

于 2012-07-13T00:07:03.910 回答