Как отправить переменную в jquery в функцию обратного вызова? function (r) {} - PullRequest
0 голосов
/ 11 мая 2010

Как отправить переменную в jquery в функцию обратного вызова? function (r) {}

Посмотрите демоверсию

Во время демонстрации обратите внимание, что форму над меню можно сериализовать. Также обратите внимание, что при щелчке по значку папки на элементе (щелкните категорию слева) и отправке формы таким образом, ее невозможно сериализовать.

У меня есть переменная, которую мне нужно передать в функцию обратного вызова, если она так называется; в функцию (r) {} часть кода.

Ниже приведен код, работающий над заголовком.

<?php $moveablecats = mysql_query("SELECT * FROM categories WHERE id != '1'  "); ?><form id="changecategoryForm2"><select id="newflex" name="thecatidichose"> <option value=""></option> <?php while($catrow =mysql_fetch_array($moveablecats)){ ?> <option value="<?php echo "$catrow[id]"; ?>"><?php echo "$catrow[title]"; ?> </option><?php } ?></select>  </form>   <p><tt id="results"></tt></p>


<script>
    function showValues() {
      var str = $("form#changecategoryForm2").serialize();
      $("#results").text(str);
    }
    $(":checkbox, :radio").click(showValues);
    $("select").change(showValues);
    showValues();
</script>

Ниже приведен код, который не работает. Я использую [плагин диалогов jquery alerts] [2]. Игнорируйте строки, которые закомментированы. Когда скрипт предупреждает сериализованную форму, она пуста, поэтому она не работает. Однако ему удается отобразить переменную itemid и categoryid .

$(".changecategory").click( function() {
   <?php $moveablecats = mysql_query("SELECT * FROM categories WHERE id != '1'  "); ?>
 var categoryid = $(this).attr("categoryid");
 var itemid = $(this).attr("itemid");
 var itemid2 = $(this).attr("itemid");
 var itemtitle = $(this).attr("itemtitle");
 var parenttag = $(this).parent().get(0).tagName;
 var removediv = "itemid_" +itemid;

   jAlert(
      'Which category do you want to move <b>'+itemtitle+ '</b> to?<br><?php $moveablecats = mysql_query("SELECT * FROM categories WHERE id != '1'  "); ?><form id="changecategoryForm"><select id="newflex" name="thecatidichose"> <option value=""></option> <?php while($catrow =mysql_fetch_array($moveablecats)){ ?> <option value="<?php echo "$catrow[id]"; ?>"><?php echo "$catrow[title]"; ?> </option><?php } ?></select>  </form>   <p><tt id="results"></tt></p>','Change category', function(r) {
         // $(parenttag).fadeOut('slow');  
         $("#"+removediv).fadeOut('slow');  

         //var newflex = $("#newflex").val();
   //alert(newflex);

   alert($("#changecategoryForm").serialize());
   //alert('categoryid ' + categoryid + ' itemid ' + itemid + '.');

   //var dataString = $("#changecategoryForm").serialize();
   /*
   //remember to add validation for blank fields

   $("#loading4").show();
   $("#loading4").fadeIn(400).html('<img src="loading.gif">');

   var newrow = "134";
   $.ajax({
    type: "POST",
    url: "formcontrols.php",
    data: dataString,
    cache: false,
    success: function(html){
     $("#creation4").after(html);
     $("#loading4").hide();
     //$("#newrow").before($('itembeforehere'));
    }
   });
   */
   //
   return false;


         jAlert(''+ itemtitle +' has been successfully moved.', 'Success');
      }
   ); 


});

1 Ответ

1 голос
/ 11 мая 2010

Я думаю, что вы, вероятно, ищете закрытие , но по вашему вопросу очень трудно это понять. Вот простой пример закрытия:

function showLater(msg, delay) {
    setTimeout(function() {
        alert(msg);
    }, delay);
}

Думайте о функции, которую мы передаем setTimeout как обратный вызов. Когда вы звоните showLater:

showLater("Hi there", 2000);

... он сразу возвращается, но анонимное закрытие все еще имеет доступ к аргументам, которые вы указали showLater, так что, когда он запускается через пару секунд, он может сделать предупреждение "Привет!"

При работе с вызовами ajax и т. П. Часто используются замыкания, поскольку по умолчанию (и по предпочтению) они асинхронны. (Я симулировал эту асинхронность выше, используя setTimeout, для простоты.)

Подробнее о замыканиях здесь .

...