代码之家  ›  专栏  ›  技术社区  ›  desbest

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

  •  0
  • desbest  · 技术社区  · 14 年前

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

    Look at the demo

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

    我有一个变量,需要将它传递给回调函数(如果调用的是这个函数的话);传递给 函数(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 plugin][2]。 忽略注释掉的行。 当脚本通知序列化表单时,它为空,因此不起作用。但是,它确实设法显示 项目 分类ID 变量。

    $(".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 回复  |  直到 14 年前
        1
  •  1
  •   T.J. Crowder    14 年前

    我想你可能在找一个 closure 但是很难从你的问题中分辨出来。这里有一个 简单的 关闭示例:

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

    想想我们传递给的函数 setTimeout 作为回拨。当你打电话 showLater :

    showLater("Hi there", 2000);
    

    …它立即返回,但匿名闭包仍然可以访问您提供的参数 后发 ,以便在几秒钟后运行时,它可以执行“hi-there”警报。

    在处理Ajax调用等类似情况时,人们经常使用闭包,因为在默认情况下(并且根据偏好),它们是异步的。(我用上述方法模拟了异步性 设置超时 ,保持简单。)

    More on closures here .