jQuery AJAX调用防止事件

jQuery AJAX调用防止事件,jquery,events,Jquery,Events,我有一个页面,它有三个非常接近的项目(一个文本框、一个下拉列表和一个超链接)。每个项目都有一个JavaScript事件,最终调用更新页面内容的相同函数。当用户更改文本框的内容,然后在不离开文本框的情况下单击超链接时,就会出现问题。textbox的change事件触发,其代码工作正常,但按钮的click事件从不触发(事件顶部的console.log行确认从未调用它)。不会抛出任何错误,引发的事件似乎工作正常。如果在其他时间单击该按钮,则会触发该按钮的事件。例如,如果用户更改文本框和选项卡,然后单击

我有一个页面,它有三个非常接近的项目(一个文本框、一个下拉列表和一个超链接)。每个项目都有一个JavaScript事件,最终调用更新页面内容的相同函数。当用户更改文本框的内容,然后在不离开文本框的情况下单击超链接时,就会出现问题。textbox的change事件触发,其代码工作正常,但按钮的click事件从不触发(事件顶部的console.log行确认从未调用它)。不会抛出任何错误,引发的事件似乎工作正常。如果在其他时间单击该按钮,则会触发该按钮的事件。例如,如果用户更改文本框和选项卡,然后单击超链接,这两个事件都会触发。同样,如果用户更改文本框的内容,然后单击页面上的其他位置,然后单击按钮,则两个事件都会触发

change事件进行AJAX调用。如果删除此AJAX调用,两个事件都会触发(问题消失)。我将AJAX调用更改为另一个AJAX调用(一个更简单的调用),它还阻止了第二个事件的触发

我使用相同的JavaScript库版本创建了一个单独的应用程序,并试图在一个更可控、更简单的环境中重新创建问题。我根本无法重新制造问题——我尝试的一切都奏效了——两个事件都发生了

显然,这是相当令人沮丧的。有人知道AJAX调用会导致第二个事件永远无法执行吗

我正在使用ASP.NETMVC3应用程序、jQuery 1.7.1.1、jQuery.UI1.8.17和autoNumeric 1.7.4

这段代码是我的有效测试代码,但它基本上揭示了失败代码的结构。希望这有助于澄清正在发生的事情

// This function exists like this because the existing code I'm trying to fix
// works like this -- these events are configured inside a function that
// is called from within some of the event handlers. There is good reason for 
// this, but outside the scope of this problem (I think).
InitializeFunction = function () {
    $("#txtAdjustment").on('change', function () {
        console.log('Textbox Changed');
        TestAjaxCall("#resultText");
    });

    $("#lnkApplyToAll").on('click', function () {
        console.log('Link Clicked');
        TestAjaxCall("#resultButton");
    });
};

TestAjaxCall = function (idToUpdate) {
    $.ajax({
        url: '/Home/GetString',
        async: true,
        cache: false,
        data: { 'text': $("#txtAdjustment").autoNumericGet() },
        success: function (result) {
            console.log('Call to server was successful.');
            console.log('Set #foShiftTab');
            $(idToUpdate).html(result);
            console.log('initialize Shift Tab');
            console.log('done');
            InitializeFunction();
        },
        error: handleAjaxSystemError
    });
};

handleAjaxSystemError = function (result, e) {
    console.log('error: ' + result);
};

$(document).ready(function () {
    InitializeFunction();
});
以下是html:

<h2>Index</h2>
<input id="txtAdjustment" type="text" class="fo-adjustment" value="100%"/>
<a href="#" id="lnkApplyToAll" class="button">Apply To All</a>
<p id="resultText"></p>
<p id="resultButton"></p>
索引


您不应该多次调用
initializeFunction
。。。这是绑定点击事件,你不想重复事件。@t.J.Crowder-Ya,我现在看到了,我的错!由于您发布的测试代码是有效的,所以我们很难理解为什么生产代码不起作用。生产代码将是难以压缩的。之所以调用initializeFunction,是因为html元素的实际ID是动态的。该代码的生产等价物接受一个参数(id),引用代码的元素看起来像$('txtAdjustment'+id)。我也在想同样的事情,但是删除那行代码并不能解决问题——只删除整个ajax调用似乎会引发这两个事件。我还发布到另一个网站。还有更多生产代码: