Javascript 使用jquery检查单击哪个类的有效方法
我想知道实现以下目标的最有效和最佳实践。情况很简单:如果单击“上一个链接”,则减少pagenum;如果单击“下一个链接”,则增加pagenum。然后将其与其父数据一起发送给函数 我知道如何通过为on执行两个不同的函数来实现这一点,但我想要一种简单、快速的方法 Html: 试着这样做:Javascript 使用jquery检查单击哪个类的有效方法,javascript,jquery,Javascript,Jquery,我想知道实现以下目标的最有效和最佳实践。情况很简单:如果单击“上一个链接”,则减少pagenum;如果单击“下一个链接”,则增加pagenum。然后将其与其父数据一起发送给函数 我知道如何通过为on执行两个不同的函数来实现这一点,但我想要一种简单、快速的方法 Html: 试着这样做: $(document).on('click', '.prevpg, .nextpg', function(){ var element = $(this).parent('div').text();
$(document).on('click', '.prevpg, .nextpg', function(){
var element = $(this).parent('div').text();
// When prevpg was clicked
if($(this).hasClass("prevpg")){
somefunction(pagenum--, element)
}
else{
// When nextpg was clicked
somefunction(pagenum++,element)
}
})
在该代码中,存在输入错误:
<div id="results">
hello world
<a class=".prevpg">Previous</a>
<a class=".nextpg">Next</a>
如果您有两个以上的条件要检查,请使用开关
或else if
梯形图调用相应的功能。对于您的代码,只有两种情况可以使用if-else
$(document).on('click', '.prevpg, .nextpg', function(){
var element = $(this).parent('div').text();
if($(this).hasClass("prevpg"))
somefunction(pagenum--, element)
else
somefunction(pagenum++,element)
});
您的html/代码有几个问题,我已经清理了它们并添加了答案 我还假设您打算获取值
“hello world”
,而不是“hello world Previous Next”
HTML
考虑这个示例,它演示了内联onClick事件 HTML
<div>
hello world
<a class="prevpg" onClick="someFunction('prev', this)">Previous</a>
<a class="nextpg" onClick="someFunction('next', this)">Next</a>
</div>
编辑(仅限JS解决方案)
我认为这是可能的(使用数据属性) 如果要将事件绑定到文档,请使用名称空间
$(document).on("click.HANDLE_CLICK_LINK", .....);
第6行的输入错误,您的意思是
元素
不是elment
。为什么要使用父div?如果($(this).attr('class')==“prevpg”)html中的所有内容都是动态的,您可能可以尝试一下。我需要将父div的内容传递到另一个函数中。sry缩进已关闭,仅此而已。它被更正了。@ravitadi你可以检查一下我的回答是否解决了你的问题。谢谢@Samuel的回答,这是一个很好的接近我试图做的事情的方法吗?我编辑了这个问题。只是想让ajax调用不要使用内联javascript,因为不同浏览器的行为不同。谢谢你的回答@Script Shiva。很好的回答,不幸的是,在我的例子中,html是动态的(由javascript生成),因此无法工作。@fuserthrower您能解释一下吗?在任何浏览器中,我都没有发现简单的onClick有什么不同。它们的工作原理都是一样的。签出这个@fuserthrower我接受你的链接,但是在这种情况下,这个代码只出现在这个页面上,也只出现在页面的两个地方。显然没有可维护性问题。我看不到你在链接中所说的任何浏览器兼容性。无论如何,谢谢你的回复。
$(this).hasClass("prevpg");
$(document).on('click', '.prevpg, .nextpg', function(){
var element = $(this).parent('div').text();
if($(this).hasClass("prevpg"))
somefunction(pagenum--, element)
else
somefunction(pagenum++,element)
});
<div id="results">
hello world
<a class="prevpg">Previous</a>
<a class="nextpg">Next</a>
</div>
pagenum = 0;
$(document).on('click', '.prevpg, .nextpg', function () {
var element = $(this).parent('div').contents().first().text();
if ($(this).hasClass('prevpg')) {
pagenum--;
somefunction(element);
}
else if ($(this).hasClass('nextpg')) {
pagenum++;
somefunction(element);
}
});
function somefunction(data) {
var test = !(data == 'hello world');
$.ajax({
url: 'search',
type: 'GET',
data: {
'pagenumber': pagenum,
testdata: test
},
dataType: 'json',
success: function(res) {
$('body').append(res.data);
}
});
}
<div>
hello world
<a class="prevpg" onClick="someFunction('prev', this)">Previous</a>
<a class="nextpg" onClick="someFunction('next', this)">Next</a>
</div>
function somefunction(action, el) {
if(action == 'prev') pagenum--;
else pagenum++;
var data = $(el).parent('div').text();
// AJAX call
}
$('.prevpg, .nextpg').on('click', function(){
if($(this).attr('class') == 'prevpg') pagenum--;
else pagenum++;
var data = $(this).parent('div').text();
// AJAX call
// If you need some function call it like this
// someFunction(pagenum, data);
});
<div>
hello world
<a class="control" data-move="-1">Previous</a>
<a class="control" data-move="+1">Next</a>
</div>
$(".control").on("click", function(e){
var t_number = parseInt($(this).attr("data-move")),
element = $(this).parent('div').text();
someFunction(total + t_number, $(this));
return false;
});
$(document).on("click.HANDLE_CLICK_LINK", .....);