4

我想创建一个 JavaScript 函数,该函数将创建一个 HTML 表单并返回用户在表单中输入的输入。我愚蠢的第一次尝试是这样的:

function getInput() {
    $('#somediv').html( "<input type='button' id='mybutton' name='Click Me'></input>" );
    $('#mybutton').click( function() { return "result"; } );
}

result = getInput();

alert( result );

(实际情况比较复杂,用户必须先输入一些文字,然后在几个不同的按钮之间进行选择,返回值取决于输入的文字和选择的按钮,但我认为这些都是外围问题,所以我把它们省略了)。如果我按照书面方式运行它,我会收到警报“未定义”,我想要的是警报“结果”。本质上,我希望该函数在被明确告知之前不要返回。有什么办法可以做到这一点?如果不是,那么在精神上与上述类似的最简单的解决方法是什么?

这里提出了一个非常相似的问题:JavaScript 暂停执行函数以等待用户输入。恐怕我只是无法很好地理解这些反应以适应我的特殊情况。也许有人可以建议如何这样做,或者从头开始也可以。

4

2 回答 2

2

以这样的形式等待用户输入是不可能的。您需要将其分成两部分来处理异步请求。

function getInput(callback) {
    $('#somediv').html( "<input type='button' id='mybutton' name='Click Me'></input>" );
    $('#mybutton').click( function() { callback("result"); } );
}

function processInput (result) {
    alert(result);
}

getInput(processInput);
于 2012-11-02T02:27:12.453 回答
1

我认为您正在寻找的是事件委托,使用事件委托您可以在按钮添加到表单之前将您的函数绑定到您的函数。#mybutton

例如使用.on()

 $(document).on('click', '#mybutton', function() {
  //your code here
});

事件委托背后的基本思想是利用 JavaScript 事件冒泡这一事实,因此您所做的是将事件绑定到更高级别的元素,DOM然后检查它的来源,只要更高级别在您绑定事件时存在。

于 2012-11-02T02:41:56.580 回答