2013-06-10 2 views
1

Я пытаюсь использовать bootbox с Twitter Bootsrap.

В приведенном ниже коде, когда я использую this.attr('href');, и получаю TypeError: this.attr is not a function.

Когда я перехожу на $(this).attr('href');, я получаю Undefined.

<a class="alert" href="list_users.php?id=123">Delete user</a> 

<script src="bootbox.min.js"></script> 
    <script> 
    $(document).on("click", ".alert", function(e) { 
     e.preventDefault(); 

     bootbox.confirm("Are you sure?", function(result) { 

     if (result) { 
      document.location.href = this.attr('href'); // doesn't work 
      document.location.href = $(this).attr('href'); // Undefined 
     }    
    }); 

    }); 
</script> 

Есть идеи?

+1

jQuery! == Javascript – PlantTheIdea

ответ

7

Это не ваша JQuery функция обратного вызова событие больше, но bootbox обратного вызова ... попробуйте $.proxy, чтобы связать контекст:

$(document).on("click", ".alert", function(e) { 
    e.preventDefault(); 

    bootbox.confirm("Are you sure?", $.proxy(function(result) { 
     if (result) { 
      document.location.href = this.href; 
     } 
    }, this)); 
}); 
+0

Я думаю, что 'this.href' должен делать. – PSL

+1

@PSL Да, обертка jQuery была бесплатной – Esailija

+0

@Esailija - Вы знаете, будет ли это выполняться быстрее или медленнее, чем просто хранить переменную, содержащую 'this'? – OptimusCrime

1

Проблема заключается в том, что this или $(this) больше не указывает на связь, но bootbox -callback. Это можно зафиксировать, сохранив переменную, на которую указывает $(this). Обратите внимание, что это также считается хорошей практикой, если вы используете один и тот же объект несколько раз.

$(document).on("click", ".alert", function(e) { 
    e.preventDefault(); 

    var obj = this; 

    bootbox.confirm("Are you sure?", function(result) { 
    if (result) { 
     document.location.href = obj.href; 
    }    
}); 

 Смежные вопросы

  • Нет связанных вопросов^_^