2011-10-24 2 views
0

사용자가 이미지를 클릭하여 사용자를 차단/차단 해제 할 수있는 표가 있습니다. 이건 이런거야. 난 JQuery와 데이터 테이블 플러그인을 사용하고 같은값이 한 번만 업데이트됩니다. 내 jquery 코드에 문제가 있습니까?

enter image description here

(블록/해제에 대한 열을 포함) 테이블의 HTML는 AJAX로 검색된다. 여기

는 열 블록에 대해 상기 검색된 HTML은/값의 경우, 데이터 테이블의 블록/해제 블록의 상태를 나타낸다

<td> 
    <a class="toggle" href="#toggle"> 
     <img src="app/css/images/tick.png" alt="Yes" data-id="4" data-block="0"> 
    </a> 
</td> 

차단을 0 그것은 화상 tick.png가 (활성화)이라고 보여 else tock.png (비활성화 됨).

다음 jQuery를 사용하여 클릭을 캡처하고 변경 사항을 얻기 위해 서버 측으로 데이터를 보냅니다.

$('.toggle').live('click', function() { 
    var id = $(this).find('img').data('id'); 
    var block = $(this).find('img').data('block'); 
    $.ajax({ 
     type: 'POST', 
     url: "app/ajax/User/Block.php", 
     data: 'id='+id+'&block='+block, 
     success: function(data) { 
      var image = (data == 1) ? 'app/css/images/tock.png' : 'app/css/images/tick.png'; 
      $('.toggle img[data-id="'+id+'"]').attr('data-block', data); 
      $('.toggle img[data-id="'+id+'"]').attr('src', image); 
     } 
    }); 
}); 

여기는 내가 사용하고있는 PHP 코드입니다. 내가 다시는 아무것도하지 않습니다 같은 이미지를 클릭하면 전, 한 번만 클릭 할 수있는 data-block 값이 업데이트됩니다 같은 문제가 있으므로 이미지가 상태를 전환 클릭하면

if(isset($_POST['id']) && isset($_POST['block'])) { 
    $userId = $_POST['id']; 
    //$_POST['blocks'] holds the current value of block/unblock. 
    //toggle the block/unblock state. 
    $block = $_POST['block'] == 1 ? 0 : 1; 
    User::blockUser(array($userId), $block); 
    //Respond back toggled block/unblock value. 
    echo $block; 
} 

모든 것이 잘 작동합니다. 콘솔에서 값을 확인했는데 값이 처음 클릭 한 후에도 업데이트되지 않습니다. 코드에 어떤 문제가 있습니까?

는 업데이트 : 여기

은 클릭하기 전에 즉 전에 첫 번째 단계에서 HTML입니다.

<a class="toggle" href="#toggle"> 
    <img src="app/css/images/tick.png" alt="Yes" data-id="4" data-block="0"> 
</a> 

여기에 같은 행을 클릭하면 HTML이 표시됩니다.

<a class="toggle row_selected" href="#toggle"> 
    <img src="app/css/images/tock.png" alt="Yes" data-id="4" data-block="1"> 
</a> 
//Here the extra class row_selected is added by default by another plugin, do you think this is creating the problem? 

그리고 여기서는 첫 번째 클릭 이후입니다.

<a class="toggle" href="#toggle"> 
    <img src="app/css/images/tock.png" alt="Yes" data-id="4" data-block="1"> 
</a> 
+0

두 번째 img가 동일한 클래스'toggle'을 수신하는지 확인합니까? –

+0

고맙습니다. @Ghommey, 제 코드를 업데이트 해주세요. –

답변

1

jQuery를 자체 데이터 구현이있다 : 당신은 당신이 $('.toggle') 같은 수준의 검출을위한 jQuery를 사용하지 말아야 또한 $(this).find('img').data('block')

그것을 읽을

대신 .attr('data-block', data);.data('block', data);를 사용해야합니다 당신의 경우 태그를 알아. 예제에서 성능을 쉽게 향상시킬 수 있습니다. $('a.toggle')

+0

아니요, 문제가 될 수 없습니다. 즉, 값이 0 인 경우 현재 상태를 토글해야하기 때문에 1과 부통령으로 변경하십시오. 그 반대. 내가 그 코드를 시도하고 만약 내가 그것을 전혀 업데이 트되지 않습니다 마십시오. –

+0

알겠습니다. jQuery 데이터 메소드를 설정자로 사용하십시오. – jantimon

+0

wooow, 고맙습니다. 그래서 버그였습니다.'대신'.data()'를 사용해야했습니다.attr()', 작동 중입니다. 다시 한번 감사드립니다. @Ghommey –

관련 문제