我有以下代码,但我没有在回复中收集值i
:
function() {
var i;
var a = $('div p').click(function data() {
i = $(this).prev().prev().before($('span')).text();
console.log(i);
});
return i;
}
答案 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;