jQuery选择问题,如何在事件发生时选择元素?

时间:2014-10-20 08:44:17

标签: jquery

我有几个按钮,根据存储在数据库中的状态(true或false)单击它们,0:使用db中的ajax更改值,1:出现确认模式,如果用户确认,则再次使用ajax值更改。

HTML:

<span class="1" data-state="{{ $subscribe->newsletter }}" data-type="1"></span>
<span class="2" data-state="{{ $subscribe->send_products }}" data-type="2"></span>
<span class="3" data-state="{{ $subscribe->send_shares}}" data-type="3"></span>

jQuery的:

  var confirm_modal = $('#unsubscribe-confirmation');

  $('.1, .2, .3').click(function() {

     var button = $(this);
     var state = $(this).data('state');
     var type = $(this).data('type');

     if ( state == 1 ) {
        confirm_modal.modal();
     } else {
        $.ajax({
           'url': get_base_url_with_ajax_url() + 'subscribe',
           'data': { "state": state, "type" : type },
           'type': 'POST',
           'dataType': 'json',
           success: function(result) {
              button.attr('data-state', '1');
           }
        });
     }
  });
 confirm_modal.find('#confirm').click(function() {
     $.ajax({
        'url': get_base_url_with_ajax_url() + 'subscribe',
        'data': { "state": state, "type": type },
        'type': 'POST',
        'dataType': 'json',
        success: function(result) {
           $(this).attr('data-state', '0');
           confirm_modal.modal('hide');
        }
  });

因此,在第一个语句中,当更改数据状态时,选择器$(this)会起作用。但是当出现模态时,我如何选择元素,最初采用的是:“。sbs-nwlttr,.sbs-evt,.sbs-prod”?

感谢您的关注。

1 个答案:

答案 0 :(得分:1)

首先,虽然我怀疑你只是用它进行测试,但是避免使用一个数字的类名,以及那些以css中不允许的数字开头的名称(更多细节可以在{{3}中找到) }),例如将class="1"重命名为class="one"

另一方面,唯一的问题是你的button变量不是全局变量,只在其中一个函数中声明。在外面声明它,然后你可以在另一个函数中使用它,如下所示:

var button;

$('.one, .two, .three').click(function() {

    button = $(this);
    // ...
}

confirm_modal.find('#confirm').click(function() {

    alert(button.text()); // for example

}

我设置了一个演示这个的小提琴(与上面略有不同,但应该清楚地表明行为:this questions