【问题标题】:Getting a php variable and passing it to a jQueryUI dialog获取 php 变量并将其传递给 jQueryUI 对话框
【发布时间】:2011-11-21 03:51:33
【问题描述】:

我正在开发的网站中使用 jQueryUI 对话框小部件。基本上,该页面列出了朋友列表和向每个人发送消息的链接。这是 html 的 sn-p。

...
<td><?php echo $realname; ?></td>
<td><?php echo $username; ?></td>
<td><a href="#" id="opener">Send Message</a></td>
...

我的 javascript 看起来像:

$(document).ready(function() {
 var $dialog = $('#dialog')
  .dialog({
   autoOpen: false,
   resizable: false,
   modal: true,
   height: 350,
   dialogClass: 'no-close',
   draggable: false
 });
 $("#opener").click(function() {
   $dialog.dialog('open');
   return false;
 });
 $('#closedialog').click(function() {
   $dialog.dialog("close");
   return false;
 });
});

最后,在我的 html 的底部,它是:

<div id="dialog" title="Send a message"><form action="<?php echo $currURL; ?>">
 <p>To: {would want for something like "RealName (username)" to appear here}</p>
  <div align="center">
  <textarea cols="40" rows="10"></textarea>
  </div>
 <p align="right"><span class="button" style="text-align: right;">
  <input type="submit" value="Submit" /><button id="closedialog">Cancel</button>
 </span></p>
</form></div>

假设您朋友列表中的第一个人是约翰史密斯 (johnsmith),下一个是简史密斯 (janesmith)。是否可以仅为该表行传递 $realname 和 $username 的值,以便在 jQuery 对话框小部件中也将其打印出来? - 或者 - 你对如何更好/更有效地做到这一点有什么建议吗?

【问题讨论】:

    标签: php javascript jquery-ui dialog


    【解决方案1】:
    • 在对话框中放置一些占位符,找到它们并存储对它们的引用。
    • 将您的id="opener" 更改为class="opener"
    • 每当点击 .opener 链接时,请在其周围的 TD 中查找您所追求的值并将它们写入您引用的占位符

    演示 http://jsfiddle.net/uHXbV/5/

    这可以通过使用data- attrs 或类似的东西来进一步增强,但该演示对原始代码的影响尽可能小,以使其易于理解。

    【讨论】:

    • 我实际上还有 3 个对话框需要修复。你用这个回答了一切。我很感激。再次感谢。
    • JAAulde,有没有办法可以将 $username 的值回显到表单中?假设
    • 当然,您总是可以这样做:&lt;input type="hidden" name="uid" value="&lt;?php echo htmlentities($username); ?&gt;"/&gt;。但是,如果您打算将其与您最初的问题联系起来,我需要您说得更具体一些。
    【解决方案2】:

    您应该在锚标记上使用 onclick 处理程序,而不是将 click 绑定到 #opener,该处理程序使用这些参数调用函数。然后,该函数将设置对话框函数使用的对话框元素的内容。也许是这样的:

    <td><a onclick="openDialog('<?= $realname; ?>','<?= $username; ?>');">Send Message</a></td>
    

    那么你的功能是:

    function openDialog(realname, username) {
        // set the contents of you dialog elements.
        $('#messageRealname').text('realname');
        $('#messageUsername').text('username');
        // now open the dialog
        $dialog.dialog('open');
    }
    

    然后

    【讨论】:

    • 注意,我知道很多人不喜欢 php 短标签,所以如果你喜欢,请替换
    • 请不要使用 onclick 属性,没有理由将 HTML 和 JavaScript 混在一起。将用户名放在便于从 JavaScript 访问的位置(如自定义数据属性)并从 JavaScript 绑定到 click 事件。如果您打算这样做,请确保使用 json_encode 正确编码以在 js 代码中使用,并使用 htmlspecialchars 正确编码以用作 HTML 属性。
    • 我将支持避免使用onclick attr 的请求——尤其是因为 jQuery 可用并且正在使用中。
    • 有趣。为什么不混合它们?避免onclick有什么好处?避免使用 onclick 而是绑定所有点击的目的是什么?
    • @davidethell 这类似于将内联 CSS 移动到外部文件中,从而分离表示和结构。在这种情况下,分离表示和 行为 提供了对 JavaScript 逻辑的更大封装,它不会污染标记 - 启用更智能的 JavaScript 浏览器缓存,因为它位于外部文件中。缺点是如果没有结构良好的 JavaScript,可能很难跟踪哪些元素绑定了事件。
    猜你喜欢
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 2011-06-12
    相关资源
    最近更新 更多