我正在尝试使用jquery函数处理具有唯一标识符的类。 但似乎没有将var添加到元素中...我该怎么做
我的代码就是这个......
var x = 1;
$('.newest_posts').each(function() {
$('.showFull' + x).on('click', function(e) {
$('.newest_small' + x).hide(); // hide image preview on delete click
$('.newest_full' + x).show(); // hide image delete link on click
e.preventDefault();
});
x = x + 1;
});
对jquery不是很精通,但是我被绊倒是因为我有这个代码可以先隐藏它们
var i = 1;
$('.newest_posts').each(function() {
$('.newest_full' + i).hide();
i = i + 1;
});
答案 0 :(得分:2)
你必须问一个问题:当调用点击处理程序时,<LinearLayout
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:weightSum="1"
tools:context="com.favtest2.MainActivity">
<Button
android:id="@+id/addBtn"
android:text="Add New Item"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="addItems"
android:layout_gravity="right" />
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="false" />
等于 ?它在注册处理程序时不等于x
值,但在循环完成后等于x
的值。
假设没有其他任何修改它,它将等于x
。
以下是问题的快速解决方法:
$(.newestPosts).length() + 2
它在处理函数的范围内创建一个新变量。
更好的解决方法是省去外部var x = 1;
$('.newest_posts').each(function() {
var xCopy = x;
$('.showFull' + xCopy).on('click', function(e) {
$('.newest_small' + xCopy).hide(); // hide image preview on delete click
$('.newest_full' + xCopy).show(); // hide image delete link on click
e.preventDefault();
});
x = x + 1;
});
并使用x
处理程序的第一个参数,它将成为索引。
each
答案 1 :(得分:0)
您必须首先了解javascript是异步的,并且该代码不会以您期望以同步编程语言运行的方式运行。
每个循环在页面加载时运行,递增x变量,而您作为参数传递给“&”按钮的函数。 event仅在页面上单击实际元素时运行。此时,x的值将与您拥有的帖子数相同。
你可以这样做:
var x = 1;
$('.newest_posts').each(function() {
$('.showFull' + x).on('click', function(e) {
var thisElementsIndex = $(this).attr("class").split(' ').filter(function(el){
return el.indexOf('showFull') != -1
})[0].replace('showFull', '');
$('.newest_small' + thisElementsIndex ).hide(); // hide image preview on delete click
$('.newest_full' + thisElementsIndex ).show(); // hide image delete link on click
e.preventDefault();
});
x = x + 1;
});
这里发生的是,每个&#39;使用x变量进行迭代可确保所有类在单击它们时触发该回调。在回调中,您从类名中检索x的值并将其传递给隐藏/显示选择器。
答案 2 :(得分:0)
您还可以使用data()
方法存储其索引,以便在元素的onclick函数中使用它:
var x = 1;
$('.newest_posts').each(function() {
$('.showFull' + x).data('index', x);
$('.showFull' + x).on('click', function(e) {
var index = $(this).data('index');
$('.newest_small' + index).hide(); // hide image preview on delete click
$('.newest_full' + index).show(); // hide image delete link on click
e.preventDefault();
});
x = x + 1;
});
这具有将每个迭代索引映射到其对应元素的优点,允许其他函数从中受益;你也不必关心x的值,它的范围不在函数范围内。