2012-04-30 115 views
6

我有以下代码如何获得ID打开对话框

<td><a href="#" id="dialog_link-19" class="ui-state-default ui-corner-all">Click here</a></td> 
<td><a href="#" id="dialog_link-25" class="ui-state-default ui-corner-all">Click here</a></td> 
<td><a href="#" id="dialog_link-33" class="ui-state-default ui-corner-all">Click here</a></td> 
<td><a href="#" id="dialog_link-556" class="ui-state-default ui-corner-all">Click here</a></td> 

#dialog_link是动态生成的。

在我的js我需要知道哪些被点击。

这是我的js

$('#dialog').dialog({ 
      autoOpen: false, 
      width: 600, 
      buttons: { 
       "Ok": function() { 
        $(this).dialog("close"); 
       }, 
       "Cancel": function() { 
        $(this).dialog("close"); 
       } 
      } 
     }); 

     // Dialog Link 
     $('#dialog_link').click(function(){ 
      $('#dialog').dialog('open'); 
      $.ajax({ 
        url: "teams/pp", 
        type: "POST", 
        data: 
        success: function(data){ 

        console.log(data); 

        } 

       }); 

      return false; 
     }); 
+1

我很困惑。在这段代码中,你需要知道哪个框被点击了?如果ID是自动生成的,那么('#dialog_link')。click会做什么?它似乎不会得到任何地方 – Ryan

回答

4

你可以得到它被点击liek此一个的ID:

$('a[id*=dialog_link]').click(function(){ 
    var id = $(this).attr('id'); 

    console.log(id); 
}); 
9

使用id^代替id*,用于id^,表明id开始与给定的文本和id*匹配,如果给定的文本在id中可用,则任何地方甚至最后像id1-dialog_link

$("td a[id^='dialog_link']").click(function(){ 
    var id = $(this).prop('id'); 
    console.log(id); 
}); 

这里a[id^='dialog_link']将匹配dialog_link-19但不id1-dialog_link

+0

由于使用道具,这是否比我的获得更多upvotes?我想人们会误解何时应该使用道具。直接从JQuery的prop()页面:例如,selectedIndex,tagName,nodeName,nodeType,ownerDocument,defaultChecked和defaultSelected应该检索并使用.prop()方法进行设置。在jQuery 1.6之前,这些属性可以使用.attr()方法检索,但这不属于attr范围。这些没有相应的属性,只是属性。 – Evan

+0

我认为我们的答案还有另一个区别,它是选择器字符串,您使用了'$('a [id * = dialog_link]')'这意味着任何包含这个单词'dialog_link'的id在id内,而我的是$ ('a [id^= dialog_link]')'这意味着只有以'dialog_link'这个词开头的id。 –

2

这将返回点击链接的数量:

$('a[id*=dialog_link]').click(function() { 
    var id = $(this).attr('id').replace('dialog_link-',''); 
    alert(id); 
}); 

Demo

我已经使用了.replace()功能删除文本