点击它后得到每个选择器?

时间:2011-08-16 11:39:28

标签: javascript jquery

为什么不使用这个js代码?点击后:
输出form #find_sc为“true”。
输出.pagination a是“未定义的”。
“{1}}中没有”输出(在这种情况下,不显示警报)。

form select option

您的解决方案或建议是什么?

编辑:请点击我的示例中的以下图片

$('.pagination a, form #find_sc, form select option').live('click', function(e) { e.preventDefault(); if($('.pagination a')){ var dirc = $(this).attr('href'); // this is a link tag <a></a> } if($('form #find_sc')){ var dirc = $(this).attr('class'); // this is a button tag <button></button> } if($('form select option')){ var dirc = $(this).attr('class'); // this is a selectbox. i want after click on option in it, was active and attr class in selectbox. <select><option></option></select> } alert(dirc); $.get( dirc, function(html) { //$('#ok').append(html); $('#num_count').replaceWith( $(html).find('#num_count') ); $('tr#paginate').replaceWith( $(html).find('tr#paginate') ); $('.pagination').replaceWith( $(html).find('.pagination') ); }); return false; }); - 这是 - &gt; enter image description here
form #find_sc - 这是 - &gt; enter image description here
.pagination a - 这是 - &gt; enter image description here

- &gt; [我希望在select中单击选项后,在selectbox中处于活动状态和attr类。] 示例: my problem in here

3 个答案:

答案 0 :(得分:1)

您无法知道哪个jQuery选择器“触发”了该事件。

您只知道有效元素$(this),因此只需获取其href属性(如果存在),或采用其class属性:

$('.pagination a, form #find_sc, form select option').live('click', function(e) {
    e.preventDefault();
    var sender = $(this);
    var dirc = sender.attr("href") || sender.attr("class");
    alert(dirc);
    ...
});

修改:要捕获下拉列表更改事件,您无法使用click代替change。为防止重复代码,请将其放入命名函数中:

function MyEventHandler(e) {
    e.preventDefault();
    var sender = $(this);
    var dirc = sender.attr("href") || sender.attr("class");
    alert(dirc);
    ...
}

然后附上适当的事件:

$('form select').live('change', MyEventHandler);
$('.pagination a, form #find_sc').live('click', MyEventHandler);

答案 1 :(得分:0)

我看到的问题是if陈述中给出的条件

例如,$('.pagination a')即使没有指向任何元素,也总是为真。这是一个JQuery对象,因为它是一个真正的值。 同样适用于其他if条件。

使用length属性检查替换if条件。也就是说,将$('.pagination a')替换为$('.pagination a').length

length返回此变量指向的元素数

答案 2 :(得分:0)

您应该使用length属性来检查jQuery是否返回了任何元素。同样在get成功处理程序中,您可以将$(html)缓存到局部变量中并在多个位置使用它。试试这个

$('.pagination a, form #find_sc, form select option').live('click', function(e) {
    e.preventDefault();
    if($('.pagination a').length > 0){
    var dirc = $(this).attr('href'); // this is a link tag <a></a>
    }
    if($('form #find_sc').length > 0){
    var dirc = $(this).attr('class'); // this is a button tag <button></button>
    }
    if($('form select option').length > 0){
    var dirc = $(this).attr('class'); // this is a selectbox. i want after click on option in it, was active and attr class in selectbox. <select><option></option></select>
    }
    alert(dirc);
        $.get( dirc, function(html) {            
            var $html = $(html);
            $('#num_count').replaceWith( $html.find('#num_count') );
            $('tr#paginate').replaceWith( $html.find('tr#paginate') );
            $('.pagination').replaceWith( $html.find('.pagination') );           
            });
        return false;
});