jQuery事件目标元素属性检索

时间:2013-09-06 23:48:35

标签: php javascript jquery this target

我在从事件目标元素中提取属性时遇到了一些麻烦。

我使用php访问mysql数据库。从查询中我拉出一些图像文件名和它们各自的id。然后,我将这些图像显示在一个表格中,其中包含以下行:

print '<td><img id="img_' . $row['paint_id'] . '" class="thumb_target" src="img/paint/thumb/' . $row['paint_thumb'] .'"></td>';

如您所见,此行为每个图像提供了id'img_xx',其中xx是sql数据库中的图像数字id。我还为每个图像提供了'thumb_target'类。在文档就绪中,我为thumb_target元素设置了一个.click事件。这使得AJAX调用应该将img_xx id作为数据传递。我使用

让它在chrome中工作
data: 'imgID=' + event.target.id

然而,几个小时后我决定在firefox中查看其他内容,发现它并不适用于所有浏览器。使用jQuery的方法:

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

除了未定义之外,我无法成为id。 我的定位元素与我认为的元素不同吗?

以下是相关的javascript:

function runClick() {
  var id = $(this).attr('id');
  alert(id);
  $.ajax({
    url: 'overlay.php',
    //~ data: 'imgID=' + event.target.id,
    //~ data: ({ imgID: id }),
    data: 'imgID=' + id,
    dataType: 'json',
    success: function(data, textStatus, jqXHR) {
        processJSON(data);
    },
    error: function(jqXHR, textStatus, errorThrown){
        alert("Failed to perform AJAX call! textStatus: (" + textStatus +
              ") and errorThrown: (" + errorThrown + ")");
    }
  });
}

$(document).ready( function() {
  $('.thumb_target').click( function() {
    runClick();
  });

  $('#overlay').hide();
});

以下是测试页面的链接:http://www.carlthomasedwards.com/painting2.php

2 个答案:

答案 0 :(得分:2)

runClick在全局范围内执行,因此this引用全局对象(window)。

请改用:

$('.thumb_target').click( function(event) {
    runClick.apply(this);
  });

甚至更简单:

$('.thumb_target').click( runClick);

答案 1 :(得分:2)

当浏览器执行runClick时,不会保留this上下文。如果您暂停Chrome debugger,则可以看到this在调用Window时实际为runClick

绕过问题的方法是将元素传递到runClick

function runClick(elem) {
  alert($(elem).attr('id'));
  ...
}

$('.thumb_target').click( function() {
  runClick(this);
});