#jquery-ui #jquery
#jquery-ui #jquery
Вопрос:
Я столкнулся с проблемой в диалоговом окне jQuery, в котором было написано, чтобы попросить пользователя ввести комментарий, но функция не работает должным образом из-за asyn AJAX.
Вот пример кода
HTML
<header>
<nav>
<input type="button" id="to-execute" value="Execute"/>
<input type="hidden" id="data1" value="1" />
<input type="hidden" id="data2" value="2" />
</nav>
</header>
<div id="add-comment" style="display:none;">
<b>Please enter comment:</b>
<textarea name="comment" rows="5" cols="50"></textarea>
</div>
Javascript
$(document).ready(function() {
$("input#to-execute").live("click", function() {
if (calUtils.addCalculation() amp;amp; calUtils.commentAdd()) {
return calUtils.endResult();
}
alert("I not enter the function at all");
});
});
var calUtils = {
addCalculation: function() {
var sum = parseInt($("#data1").val()) parseInt($("#data2").val());
if (sum > 0) {
alert("More than Zero. Sum =" sum);
return true;
} else {
alert("Less than Zero. Sum =" sum);
return false;
}
},
commentAdd: function() {
// Dialog
$("#add-comment").dialog({
title: "Comment",
modal: false,
width: "500",
resizable: false,
position: "center",
buttons: {
"Cancel": function() {
$(this).dialog("close");
return false;
},
"Confirm": function() {
var comment = $("#add-comment textarea").val();
if (!comment amp;amp; comment != null) {
alert("Please enter Comment!");
return false;
}
$(this).dialog("close");
return true;
}
}
}).dialog("open");
},
endResult: function() {
alert("Thanks you");
}
}
При нажатии кнопки Execute функция не ожидает завершения выполнения calUtils.commentAdd(), прежде чем перейти к следующей строке. Это приведет к тому, что calUtils.endResult() никогда не будет выполняться вечно.
Может ли кто-нибудь вразумительно сказать мне, что не так с моим кодом? Как я могу закодировать так, чтобы программа выполняла calUtils.endResult(), когда оба (calUtils.addCalculation() amp;amp; calUtils.commentAdd()) == TRUE?
Вы можете попробовать код здесь http://jsfiddle.net/fsloke/4qdsx/1 /
Спасибо -fsloke
Ответ №1:
Ваша функция «calUtils.commentAdd()» всегда будет возвращать undefined для текущего оператора, что означает, что calUtils.addCalculation() amp;amp; calUtils.commentAdd() всегда будет false . Я думаю, именно поэтому ваш «calUtils.endResult()» никогда не работает.
Комментарии:
1. Из-за того, что вызов ajax вызвал его неопределенным, в любом случае, как заставить это работать?