如何将jquery中的变量发送到回调函数? function(r){}
在演示中,请注意菜单上方的表单可以序列化。另请注意,在项目上单击文件夹图标(单击左侧的类别)并以该方式提交表单时,无法序列化。
我有一个变量需要传递给回调函数,如果这是它的调用;到代码的 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');
}
);
});
答案 0 :(得分:1)
我认为你可能正在寻找一个closure,但你的问题很难说清楚。这是一个闭包的简单示例:
function showLater(msg, delay) {
setTimeout(function() {
alert(msg);
}, delay);
}
将我们传递给setTimeout
的函数视为回调。致电showLater
时:
showLater("Hi there", 2000);
...它立即返回,但是匿名闭包仍然可以访问你给showLater
的参数,所以当它在几秒钟后运行时,它可以执行“Hi there”警报。
在处理ajax调用之类时,一个人使用了很多闭包,因为默认情况下(和首选)它们是异步的。 (我使用setTimeout
模拟了上面的异步性,以保持简单。)