如何将jquery中的变量发送到回调函数?功能(r){}

时间:2010-05-11 12:04:38

标签: jquery function variables callback

如何将jquery中的变量发送到回调函数? function(r){}

Look at the demo

在演示中,请注意菜单上方的表单可以序列化。另请注意,在项目上单击文件夹图标(单击左侧的类别)并以该方式提交表单时,无法序列化。

我有一个变量需要传递给回调函数,如果这是它的调用;到代码的 function(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 dialogs插件] [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 个答案:

答案 0 :(得分:1)

我认为你可能正在寻找一个closure,但你的问题很难说清楚。这是一个闭包的简单示例:

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

将我们传递给setTimeout的函数视为回调。致电showLater时:

showLater("Hi there", 2000);

...它立即返回,但是匿名闭包仍然可以访问你给showLater的参数,所以当它在几秒钟后运行时,它可以执行“Hi there”警报。

在处理ajax调用之类时,一个人使用了很多闭包,因为默认情况下(和首选)它们是异步的。 (我使用setTimeout模拟了上面的异步性,以保持简单。)

More on closures here