2010-05-11 44 views
0

如何發送jQuery中的變量到回調函數?函數(r)的{}如何發送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警報對話框插件] [2]。 忽略註釋掉的行。 當腳本提醒序列化表單時,它是空白的,所以它不起作用。然而它設法顯示itemid類別變量。

$(".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'); 
     } 
    ); 


}); 
+0

你能澄清你的問題嗎?理想情況下創建一個很簡單的例子,你想做什麼?以目前的形式回答這個問題是非常困難的。 – 2010-05-11 12:11:18

+0

你有兩種形式,changecategoryForm2和changecategoryForm,或者是一個錯字? – 2010-05-11 12:38:41

+0

我有2種形式。 1窗體是屏幕頂部的窗體。另一個,你會看到當你註冊到網站,選擇一個類別在左邊,然後單擊一個文件夾圖標。 – desbest 2010-05-11 21:11:29

回答

1

我想你可能尋找一個closure,但它真的很難從你的問題告訴。下面是一個封閉的簡單例如:

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

認爲,我們傳遞給setTimeout爲回調函數。當你調用showLater

showLater("Hi there", 2000); 

...它立即返回,但匿名閉包仍然可以訪問你給showLater的參數,這樣,當它被運行後幾秒鐘,它可以做「你好」警報。

一個人在處理ajax調用等時會使用閉包,因爲默認情況下(和優先)它們是異步的。 (我使用setTimeout模擬了上面的異步性,以保持簡單。)

More on closures here