Javascript(jquery),“指针”到另一个函数中的''this'?

时间:2017-10-23 21:18:56

标签: javascript jquery

大家好,感谢回复:)。 我有这个代码用于模态图库

  var $overlay = $("<div id='overlay'></div>");
  var $image = $("<img class='overlayImage'>");
  var $caption = $("<p></p>");
  $overlay.append($image);
  $overlay.append($caption);

  $(".galleryWrap").append($overlay);
  $(".galleryItem").click(function(event) {
    event.preventDefault();
    var imageLocation = $(this).attr("href");
    $image.attr("src", imageLocation);
    $overlay.show();
    var captionText = $(this).children("img").attr("title");
    $caption.text(captionText);
      });

假设我想在$overlay.click()函数中显示下一张图像,例如:

$overlay.click(function()
var imageLocation = $(this).next().attr("href");
    $image.attr("src", imageLocation);
    $overlay.show()

我可以以某种方式将我的新imageLocation变量指向.galleryItem,这是在上一个函数中点击的,以获得下一个兄弟吗? 我知道它可能以其他方式完成,只是玩和试图理解JS:)

2 个答案:

答案 0 :(得分:1)

为什么不只是简单地使用一个全局变量,您在this点击时分配给.galleryItem?这将使全局变量成为单击的特定库项目。然后,您可以在第二个click函数中检查此全局变量:

var selectedItem;
$(".galleryItem").click(function(event) {
  selectedItem = this; // selectedItem is now assigned to the specific .galleryItem
});
$overlay.click(function(event) {
  console.log(selectedItem); // Do something with selectedItem
});

在以下示例中可以看到这一点:

var selectedItem;
$(".galleryItem").click(function(event) {
  selectedItem = this; // selectedItem is now assigned to the specific .galleryItem
});
$("#overlay").click(function(event) {
  console.log(selectedItem); // Do something with selectedItem
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="1" class="galleryItem">One</div>
<div id="2" class="galleryItem">Two</div>
<div id="3" class="galleryItem">Three</div>
<br />
<div id="overlay">Overlay</div>

希望这有帮助! :)

答案 1 :(得分:0)

您可以在单击处理程序中移动显示逻辑,并使用全局变量来维护状态:

from surveyQuestion in Context.SurveyQuestions
join question in Context.Questions 
on surveyQuestion.Question_ID equals question.Question_ID
where surveyQuestion.Survey_ID == surveyId
orderby surveyQuestion.SORT_ORDER 
group new { question, surveyQuestion.SORT_ORDER } by surveyQuestion.SECTION  into section
select new SurveySection
  {
     SurveyId = surveyId,
     SectionId = section.Key,
     Questions = section.OrderBy(q => q.SORT_ORDER)
                        .Select(q => q.question)
                        .ToList()
  };