Domanda

Sto cercando di attivare un pulsante di interfaccia utente da un callback di un'operazione POST. Il pulsante jQuery UI avrebbe neanche bisogno di avere "ui ui-icon-icon-minus" o "ui ui-icon-icon-controllato" come span.class

Ho cercato di alternare - ma alternare solo rimuove e aggiunge di nuovo una parte della classe - non scambiare l'intera classe. Questo è dove mi sono bloccato in questo momento:

$('#toggle-page, a.toggle-page').click(function() {
pageID = $(this).parent('div').attr('id');
$.post(
    "webadmin/pages.toggle.serialize.php", 
    {id : pageID },
    function(data, textStatus, xhr) {
      if ($("#"+pageID+" a#toggle-page span").hasClass('ui-icon ui-icon-minus')) {
            $("#"+pageID+" a#toggle-page span").removeClass('ui-icon ui-icon-minus');
            $("#"+pageID+" a#toggle-page span").addClass('ui-icon ui-icon-check');
          }
      if ($("#"+pageID+" a#toggle-page span").hasClass('ui-icon ui-icon-check')) {
            $("#"+pageID+" a#toggle-page span").removeClass('ui-icon ui-icon-check');
            $("#"+pageID+" a#toggle-page span").addClass('ui-icon ui-icon-minus');
          }
    }
);
});

So che il codice di cui sopra non è la strada giusta ... ma qualcuno mi può puntare nella giusta direzione? L'Id ecc sono un po 'annidato perché theres più voci che possono essere modificati -. Da qui la roba pageID

È stato utile?

Soluzione

Vorrei fare in questo modo:

$('#toggle-page, a.toggle-page').click(function() {
pageID = $(this).parent('div').attr('id');
$.post(
    "webadmin/pages.toggle.serialize.php", 
    {id : pageID },
    function(data, textStatus, xhr) {
      var node = $("#"+pageID+" a#toggle-page span");
      node.toggleClass('ui-icon-minus');
      node.toggleClass('ui-icon-check');
    }
);
});

Altri suggerimenti

Questo dovrebbe essere più vicino a ciò che si desidera. memorizzare nella cache sempre il ritorno da un selettore jQuery, se si prevede di utilizzare di nuovo:

$('#toggle-page, a.toggle-page').click(function() {
  var  $page = $(this).parent('div'),
      pageID = $page.attr('id');
  $.post(
      "webadmin/pages.toggle.serialize.php", 
      {id : pageID },
      function(data, textStatus, xhr) {
        var $span = $page.find('a#toggle-page span');
        if($span.hasClass('ui-icon-minus')) {
          $span.removeClass('ui-icon-minus').addClass('ui-icon-check')
        } else {
          $span.removeClass('ui-icon-check').addClass('ui-icon-minus')
        }
      }
  );
});
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top