获取id作为ajax调用jQuery中的变量数据使用

时间:2016-08-24 14:44:42

标签: javascript jquery ajax

我无法从调用相同ajax函数的链接获取id。动态生成30多个链接,如下所示:

<a href="javascript:void(0)" id="105">Item 105</a>
<a href="javascript:void(0)" id="379">Item 379</a>
<a href="javascript:void(0)" id="534">Item 534</a>

这是我在谷歌搜索后的最新尝试,包括this

$(this).click(function() {
  var $id = $(this).attr('id');
  $.ajax({
    url: "somefile.asp",
    data: {
      sellerid: <%=sellerid%>,
      uid: <%=uid%>,
      itinid: $id
    },
    success: function(result) {
      $("#content").html(result);
    }
  });
});

当我用例如:

进行测试时,每个链接的ajax工作正常(但结果固定)
var $id = 379;

3 个答案:

答案 0 :(得分:1)

我发布了答案,得到了好几条评论的帮助,受到其他2人的阻碍,IMHO忘记论坛是为了帮助别人不批评。这花费了我-4分,但仍然值得!

$('#templatelist a').click(function(){
    var $id = $(this).attr('id');
    //var $id = $( this ).data( 'id' );
    $.ajax({url: "trips-check.asp", data: {sellerid: '<%=sellerid%>', uid: '<%=uid%>', itinid: $id}, success: function(result){
        $("#content").html(result);
    }});
});

总之,$(this)在启用ajax方面起作用,但没有得到变量$ id。 $(&#39; a&#39;)完全运行,但链接必须包含在带有id templatelist的div中,因此只有那些链接触发了ajax。基本的东西是的,但对新手来说还是新的。

答案 1 :(得分:0)

  

注意#1:

     

如果您的商品是动态生成的,请不要使用clickbind

     

注意#2:

     

如果使用旧的jquery版本,则应使用live版本已弃用:1.7,已删除:1.9 )。

好吧,您可以使用liveon(最佳选项),也许您可​​以修复它。

示例(最佳方式):

你html(生成动态):

<ul id="mylist">
    <li><a href="" id="...">...</a></li>
    <li><a href="" id="...">...</a></li>
    <li><a href="" id="...">...</a></li>
    <li><a href="" id="...">...</a></li>
    <li><a href="" id="...">...</a></li>
</ul>

你JS:

$('#mylist').on('click', 'a', function(){
    alert( $(this).attr('id') );
})

旧方式(糟糕的方式; 已弃用):

$('#mylist li a').live('click', function(){
    alert( $(this).attr('id') );
})

在这里学习: http://api.jquery.com/on/

在这里:https://stackoverflow.com/a/11878976/901197

完整示例:

JS:

$(document).ready(function(){
  var elements = [
    {id:1, text: "A", data: 'Hi'},
    {id:2, text: "B", data: 'Hello'},
    {id:3, text: "C", data: 'Hola'},
    {id:4, text: "D", data:'Ciao'},
    {id:5, text: "E", data:'Priviet'},
    {id:6, text: "F", data: 'Bonjour'},
    {id:7, text: "G", data:'Hallo'},
    {id:8, text: "H", data:'Olá'}
  ];
  $.each(elements, function( index, element ){
    var li = document.createElement('li'),
        a = document.createElement('a');
    $(a).attr('id', element.id)
    $(a).data('hello', element.data)
    $(a).text(element.text)
    $(li).append(a)
    $('#dynamics').append( li )
  })


  $('#dynamics').on('click', 'a', function(){
    var self = $(this);
    alert('You clicked on ' + self.text() + '. ' + self.data('hello') + ' id #' + self.attr('id') );
  })
});

HTML:

<ul id="dynamics"></ul>

试试这里:

http://codepen.io/olaferlandsen/pen/rLEZqw

答案 2 :(得分:0)

为了html有效性而生成data-id属性,而不仅仅是id

<a href="javascript:void(0)" data-id="105">Item 105</a>
<a href="javascript:void(0)" data-id="379">Item 379</a>
<a href="javascript:void(0)" data-id="534">Item 534</a>

以这种方式为生成的链接注册事件

$( 'document' ).on( 'click' , 'a[data-id]', function( evt ) {
    evt.preventDefault();
    var $id = $( this ).data( 'id' );
    $.post( 'somefile.asp' , { sellerid: '<%=sellerid%>',
                               uid: '<%=uid%>',
                               itinid: $id
                             } , function( result ) {
         $( "#content" ).html( result );
    }, 'html');
});