我没有收到回报的价值

时间:2017-10-02 21:33:40

标签: javascript function

我有以下代码,但我没有在回复中收集值i

function() {
    var i;

    var a = $('div p').click(function data() {
        i = $(this).prev().prev().before($('span')).text();

        console.log(i);

    });

    return i;
}

1 个答案:

答案 0 :(得分:0)

如评论中所述,click(...)注册了一个点击监听器并立即返回。它不会等待单击元素,因此语句return i;将在点击处理程序设置i的值之前运行。

需要i值的代码需要从单击处理程序运行,如语句console.log(i);。这可以使用callbacks

完成



function addClickListeners(callback) {
  // callback should be a function; it will be called when a link
  // is clicked and the associated text will be passed as a parameter.
  $('div p').click(function data() {
    // WARNING: .before() inserts content before an element
    // (see http://api.jquery.com/before/).
    // This is probably not what was intended!
    var i = $(this).prev().prev().before($('span')).text();
    console.log("click listener called, i:", i);
    callback(i);
  });
}

function doSomeAnalytics(i) {
  // do whatever you need to do here
  console.log("analytics function called, i:", i);
}

addClickListeners(doSomeAnalytics);

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="card">
  <p class="subscription-header">
    <img src="/micuentamovil/appicon/219/46" />
    <a href="#">Text1</a>
    <br />
    <span>Description</span>
  </p>
  <p class="banner">
    <img src="/url" />
  </p>
  <p class="link">
    <a href="#">Text2 >></a>
  </p>
  <p class="divider"></p>
  <p class="actionlink-double">
    <a href="#">option1</a>
    <a href="#">option2</a>
  </p>
</div>
&#13;
&#13;
&#13;