2012-02-20 89 views
1

我来这里很多,找到这个地方非常有用。我第一次发帖,希望有人能帮助我。动态jQuery对话框

我有一个页面创建多个链接。 当你点击一个链接时,它会打开一个关于该链接的特定对话框。该对话框包含一个表单,其中包含特定于该链接的所有数据ID 但是,当我提交时,显示属于第一个链接的数据提交,无论打开哪个对话框。

当我点击一个链接,这里是打开并根据$link.attr('href') 正确填写对话框中的代码保存按钮执行$('#prefForm').submit(); 现在我的感觉,当我点击一个链接,它会打开所有对话框链接,因此创建多个ID prefForm,因此第一个链接发送其数据

我无法分配不同的ID,因为这些表单是动态生成的,ID将是未知的。

有谁知道如何防止其他数据只加载需求,而不是所有的人在后台?

$(document).ready(function() { 
     $('#bidders td a').each(function() { 
      var $link = $(this); 
      var $dialog = $('<div></div>') 
       .load($link.attr('href') + ' #content') 
       .dialog({ 
        autoOpen: false, 
        title: $link.attr('title'), 
        width: 600, 
    buttons: [ 
     { 
      text: "Cancel", 
      className: 'cancelButtonClass', 
      click: function() { 
       $dialog.dialog('close'); 
      } 
     }, 
     { 
      text: "Save", 
      className: 'saveButtonClass', 
      click: function() { 
       $('#prefForm').submit(); 
       $dialog.dialog('close'); 
      } 
     } 
+0

如何打开对话框,通过单击或自动加载文档? – 2012-02-20 10:38:05

回答

0

您正在使用.each() - 将它们全部加载?

$('#bidders td a').each(function() { 

为什么不将它改为.click()?

$('#bidders td a').click(function(event) { 
    event.preventDefault(); 
     var $link = $(this); 
     var $dialog = $('<div></div>') 
      .load($link.attr('href') + ' #content') 
      .dialog({ 
       autoOpen: false, 
       title: $link.attr('title'), 
       width: 600, 
buttons: [ 
    { 
     text: "Cancel", 
     className: 'cancelButtonClass', 
     click: function() { 
      $dialog.dialog('close'); 
     } 
    }, 
    { 
     text: "Save", 
     className: 'saveButtonClass', 
     click: function() { 
      $('#prefForm').submit(); 
      $dialog.dialog('close'); 
     } 
    } 
+0

感谢您的回复。这是有道理的,你说的,但该链接不再打开对话框。只有当每个被调用时,链接打开对话框 – lionel28 2012-02-20 10:53:49

+0

点击不是打开对话框,而是打开页面。问题在于提交功能。 id #prefForm不是唯一的,因为每个都加载它们。点击有意义,但不打开对话框。它发送到整页 – lionel28 2012-02-20 11:05:55

+0

尝试使用preventDefault(),因为我已经更新上面。它防止超链接的工作(它不会加载页面,但(应)火灾你想要的脚本。 – Hank 2012-02-20 11:11:12

0

现在.each有在$(document).ready(function() {这意味着你创建GET为每个匹配的元素。

也许你可以将点击事件绑定到每个元素并发送GET并在事件上创建对话框?

$(document).ready(function() { 
    $('#bidders td a').click(function() { 
     var $link = $(this); 
     var $dialog = $('<div></div>') 
      .load($link.attr('href') + ' #content') 
      .dialog({ 
       autoOpen: false, 
       title: $link.attr('title'), 
       width: 600, 
buttons: [ 
    { 
     text: "Cancel", 
     className: 'cancelButtonClass', 
     click: function() { 
      $dialog.dialog('close'); 
     } 
    }, 
    { 
     text: "Save", 
     className: 'saveButtonClass', 
     click: function() { 
      $('#prefForm').submit(); 
      $dialog.dialog('close'); 
     } 
    } 
+0

click不是打开对话框,而是打开页面正如您所说,由于对话框内容必须在后台加载。一旦我把它们全部拿出来,我该如何只发送想要的? – lionel28 2012-02-20 10:57:07

+0

OK。我找到了解决方案并发布。这可能会帮助像我这样的新手我为每个表单创建了一个唯一的ID id =“prefForm_ $ bidid”我替换了$('#prefForm')。与$(this).find('form')。submit();并似乎提交正确的形式 – lionel28 2012-02-21 11:22:44