基本上我有一个脚本函数“hola ()
”,如果单选按钮值为1,它应返回值1.但由于某种原因,当我尝试在另一个函数中获取返回值时,我从未得到它
表单完美运行..唯一的问题是它不会返回值
谁能告诉我我做错了什么?感谢
$(document).ready(function(){
function hola() {
$("form[name=yN]").show("slow");
$('input[type=radio]').click( function (){
var opt = $(this).attr("value");
if (opt == "1") {
this.checked = false;
$("form[name=yN]").hide("slow");
return 1;
}
if (opt == 0) {
$("p").html ("ok");
this.checked = false;
}
})
}
$("#iForm").submit( function(event){
event.preventDefault();
var user = $("input[name=username]").val();
var password = $("input[name=password]").val();
var dbName = $("input[name=dbName]").val();
var server = $("input[name=server]").val();
$.get("1.php",
{username: user, password: password, dbName: dbName, server: server },
function(data){
if (data == "The table PAGE exists" || data == "The table SUBJECTS exists" || data == "The table USERS exists" ) {
// CALLING THE hola () function and expecting a return
var opt = hola();
$("p").html(data + opt);
}
}
)
})
})
HTML
<!-- Yes or No form -->
<form name="yN" style= "display: none; margin-left: auto; margin-right: auto; width: 6em">
<input type="radio" name="yN" value="1">yes</input>
<input type="radio" name="yN" value="0">no</input>
<button id=1 >click me!</button>
</form>
<!-- Login Form -->
<form id="iForm" style= "display: show">
<label id="username" >Username</label>
<input id="username" name="username"/>
<label id="password">Password</label>
<input id="password" name="password" />
<label id="server" >Server</label>
<input id="server" name="server"/>
<label id="dbName" >dbName</label>
<input id="dbName" name="dbName"/>
<input type="submit" value="submit" />
</form>
<p> </p>
答案 0 :(得分:4)
事件处理程序不能return
值,因为它们是异步调用的。*
您现有的hola()
函数会立即返回,return
处理程序中的click
语句只会在稍后调用,即单击按钮时。
我的方法是使用jQuery延迟对象(jQuery 1.6 +):
function hola() {
var def = $.Deferred();
// show the popup confirm form
...
$('input[type=radio]').click(function() {
// determine return value
...
// send it back to anything waiting for it
def.resolve(retval);
});
// return a _promise_ to send back a value some time later
return def.promise();
}
$.get("1.php", { ... }).done(function(data) {
if (...) {
hola().done(function(opt)) { // will be called when the promise is resolved
$("p").html(data + opt);
});
}
});
如果您愿意,可以使用opt
来表示&#34;不接受&#34;而不是返回def.reject()
值。然后使用.fail
处理程序注册要为该条件调用的处理程序。
答案 1 :(得分:3)
仅在radiobutton的click功能中返回1。 如果你想要一个函数“hola”,如果选中radiobutton则返回1,你只需要这样的东西:
function hola() {
return $("input:radio[name='yN']:checked").val();
}
答案 2 :(得分:0)
hola
甚至没有return语句。这就是它没有返回任何东西的原因(更确切地说:总是返回undefined
。)
根本不包含function
语句或所有return
语句都在嵌套return
内的JavaScript function
将永远不会返回undefined
之外的任何内容}。
答案 3 :(得分:-1)
您正在尝试从单击回调函数中返回值。将返回移到:
之外function hola() {
var result;
$("form[name=yN]").show("slow");
$('input[type=radio]').click( function (){
var opt = $(this).attr("value");
if (opt == "1") {
this.checked = false;
$("form[name=yN]").hide("slow");
result = 1;
}
if (opt == 0) {
$("p").html ("ok");
this.checked = false;
}
});
return result;
}