Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 23.02.2014, 20:51
Кандидат Javascript-наук
Отправить личное сообщение для Vladislav Посмотреть профиль Найти все сообщения от Vladislav
 
Регистрация: 13.02.2013
Сообщений: 105

Не работает: $(this).closest('.trFight').html(response);
Здравствуйте, есть таблица:

<tr class="trFight">
                            <td>3</td>
                            <td>2014-02-22 22:00:00</td>
                            <td>1</td>
                            <td class="money">100.00 $</td>
                            <td><button onclick="fight('3', 'ce971ca86aad67a6fc359df93f588d02');" class="buttonDeistvie">Играть</button></td>
                        </tr>
                    
                        <tr class="trFight">
                            <td>2</td>
                            <td>2014-02-22 21:51:56</td>
                            <td>1</td>
                            <td class="money">2.00 $</td>
                            <td><button onclick="fight('2', 'daa5af4f63ac7ae0ce8a0cdc94b82a7f');" class="buttonDeistvie">Играть</button></td>
                        </tr>


Есть JS:

function fight(fid, md5fid) {
    var fid = fid;
    var md5fid = md5fid;
    var form = $(this).closest('tr');
    
    $.ajax({
         type: "POST",
         url: "handlers/fight.php",
         data: {"fid": fid, "md5fid": md5fid},
         cache: false,
         success: function(response){
             var messageResp = new Array('Ошибка, попробуйте еще раз..');
             var resultStat = messageResp[Number(response)];
             if(response == 1){
                document.location.href = "/dragon/index#1";
             }
             else if(response == 100){
                document.location.href = "/dragon/index#100";
             }
             else{
                //form.find(".wrap_comment_block").html(response);
                //document.getElementById('ipolo') == response;
                //alert(response);
                $(this).closest('.trFight').html(response);
             } 
             }
    });
    return false;
};


Все в принципе работает (и АЯКС тоже!), потому что ALERT срабатывает корректно, вот только не могу понять, почему не работает вставка html, помощью: $(this).closest('.trFight').html(response);

По идеи должно вставлять в нужный (родительский) <tr>

Спасибо за помощь!
Ответить с цитированием
  #2 (permalink)  
Старый 23.02.2014, 20:55
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Vladislav
var form = $(this).closest('tr')
В обработчике идет вызов функции fight(). В этом случае контекст вызова будет глобальный объект (window)
Откуда у window возьмется родительский тег tr?

Сообщение от Vladislav
$(this)
А куда указывает this когда jQuery вызывает твою функцию success?
Сообщение от Vladislav
    var md5fid = md5fid;
Это че еще за перлы? Зачем переобъявляешь переменные?
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #3 (permalink)  
Старый 23.02.2014, 20:58
Кандидат Javascript-наук
Отправить личное сообщение для Vladislav Посмотреть профиль Найти все сообщения от Vladislav
 
Регистрация: 13.02.2013
Сообщений: 105

Упс, на счет второго замечания спасибо.

Ясно, что посоветуете, чтобы html вставлял в родительский <tr> от кнопки?

Последний раз редактировалось Vladislav, 23.02.2014 в 21:02.
Ответить с цитированием
  #4 (permalink)  
Старый 23.02.2014, 21:10
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

навешивать обработчики onclick через js. Тогда this будет указывать на button. А всякие fid прописывать в data-атрибутах
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #5 (permalink)  
Старый 23.02.2014, 21:27
Кандидат Javascript-наук
Отправить личное сообщение для Vladislav Посмотреть профиль Найти все сообщения от Vladislav
 
Регистрация: 13.02.2013
Сообщений: 105

Что нет не единого решения?
Я вот тут смотрю код других сайтов, некоторые прописывают "this" (см. картинку).

Может это поможет?
Ответить с цитированием
  #6 (permalink)  
Старый 23.02.2014, 22:16
Кандидат Javascript-наук
Отправить личное сообщение для Vladislav Посмотреть профиль Найти все сообщения от Vladislav
 
Регистрация: 13.02.2013
Сообщений: 105

Переписал скрип, должно было работаеть, но увы...

$(function(){
   $('#middleCon').on('click', '.buttonDeistvie', function fight(fid, md5fid) {
    var form = $(this).closest('tr');
    
    $.ajax({
         type: "POST",
         url: "handlers/fight.php",
         data: {"fid": fid, "md5fid": md5fid},
         cache: false,
         success: function(response){
             var messageResp = new Array('Ошибка, попробуйте еще раз..');
             var resultStat = messageResp[Number(response)];
             if(response == 1){
                document.location.href = "/dragon/index#1";
             }
             else if(response == 100){
                document.location.href = "/dragon/index#100";
             }
             else{
                //form.find(".wrap_comment_block").html(response);
                //document.getElementById('ipolo') == response;
                //alert(response);
                form.find(".headerTable").html(response);
             } 
             }
    });
    return false;
});
});


P.S. alert работает.
Ответить с цитированием
  #7 (permalink)  
Старый 24.02.2014, 05:51
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Vladislav
function fight(fid, md5fid
А откуда тебе придут агрументы fid и md5fid? Браузер должен сам догадаться что они тебе нужны и прислать их?
Я же говорил:
Сообщение от danik.js
А всякие fid прописывать в data-атрибутах
Пишешь:
<button data-fid="2" class="buttonDeistvie">Играть</button>

А в обработчике:

var fid = $(this).data('fid');


Тоже самое и с md5fid
__________________
В личку только с интересными предложениями
Ответить с цитированием
  #8 (permalink)  
Старый 24.02.2014, 05:53
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сообщение от Vladislav
new Array('Ошибка, попробуйте еще раз..');
Не используй конструктор!
Пиши в литеральной форме: ['Ошибка, попробуйте еще раз...']
__________________
В личку только с интересными предложениями
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
JS: работает на сервере, не работает из папки -majestic- Общие вопросы Javascript 2 02.08.2012 14:41
Не работает push! Динамическая вставка TSEH25 ExtJS 5 03.07.2012 13:00
jQyery функция странно работает! Midel Общие вопросы Javascript 4 08.04.2012 13:40
помогите найти ошибку (работает в IE но не работает в Firefox) Len4ik Javascript под браузер 2 11.05.2010 15:41
Safari + ajax некорректно работает, а в других работает demi AJAX и COMET 35 15.07.2009 14:11