当前位置: 首页 > 面试题库 >

用AJAX加载html后,为什么jQuery更改功能不起作用?

阎星华
2023-03-14
问题内容

我加载表单并通过AJAX从PHP文件中动态填充选择。在实现动态的AJAX填充选择之前,我的change函数起作用(当用户选择“
other”时,它仅显示另一个输入)。现在,更改功能不起作用。

我知道ready函数正在触发,因为jStepper函数正在运行。我已经在ready函数的内部和外部使用change函数进行了尝试。我感觉在AJAX获取完成之前加载了change函数,但这真的重要吗?

var types = "<select name='ve_categoryNo' id='ve_categoryNo'>";
var d = new Date();
$.get('scripts/vehicle_category_feed.php?date=' + d.getTime(), function ($type)
{
    $($type).find('type').each(function ()
    {
        types += "<option value='" + $(this).attr("categoryno") + "'>" + $(this).attr("category") + "</option>";
    });
    types += "<option value='other'>Other(Specify)</option></select>";
    $('#ve_categoryNo_td').html(types);
});
$(document).ready(function ()
{
    $('input[type=text]').click(function ()
    {
        $(this).select();
    });
    $('#vehicle_entry').ajaxForm(function ()
    {
        showMessage('vehicle_information_added');
    });
    $('#ve_ariNo').jStepper({minValue: 1, maxValue: 99999999});
    $('#ve_fleetNo').jStepper({minValue: 1, maxValue: 999999999});
    $('#ve_vehicleYear').jStepper();
    $('#ve_purchasePrice').jStepper({minValue: 0});
    $('#ve_categoryNo').change(function ()
    {
        if ((this.value) == "other")
        {
            $('#otherCategory').show();
            $('#otherCategory input[type=text]').focus();
        } else
        {
            $('#otherCategory').hide();
        }
    });
});

问题答案:

修改此:

$('#ve_categoryNo').change(function() {

$(document).on('change', '#ve_categoryNo', function() {

EDIT3:在更仔细地检查您的代码后,这将表现最佳:

   $('#ve_categoryNo_td').on('change', '#ve_categoryNo', function() {

因为它最靠近所讨论的元素。

您还应该将ajax调用放入我认为的就绪脚本中。

发生这种情况的原因是,在实例化DOM时,没有任何内容要绑定。以这种方式使用.on会将其绑定到文档。如果您有另一个“固定”元素来包装它,则最好使用该元素代替“文档”来绑定该元素,因为它可能会更好。

编辑:请注意,在将元素作为ajax调用完成的一部分注入后,您也可能会添加更改事件管理,但是如果多次执行此操作,则在这种情况下应首先将其解除绑定。

EDIT2:由于存在问题/评论:从文档:http :
//api.jquery.com/on/

在文档树的顶部附近附加许多委托的事件处理程序可能会降低性能。每次事件发生时,jQuery必须将该类型所有附加事件的所有选择器与从事件目标到文档顶部的路径中的每个元素进行比较。为了获得最佳性能,请在尽可能靠近目标元素的文档位置附加委托事件。避免在大型文档上的委托事件中过度使用document或document.body。



 类似资料:
  • 问题内容: jQuery click函数在这里工作正常 但是如果我通过ajax 设置一些功能,将无法正常工作。 例如 现在,最后一个不起作用。 jsfiddle示例:http : //jsfiddle.net/suhailvs/wjqjq/ 注意:CSS在这里工作正常。 我想使这些新添加的与jQuery click一起工作。 问题答案: 问题是.click仅适用于页面上已经存在的元素。如果要连接将

  • 问题内容: 在此页面上,我有一个jQuery弹出窗口和可调整大小的缩略图。如果我将鼠标悬停在缩略图上,则图像的大小将完美调整。另外,当我单击页脚中的黄色大电视按钮“ QuickBook TV”时,弹出窗口会按照我的意愿完美显示。 但是,当我单击“下一步”或“上一步”按钮时,将使用AJAX加载新内容,而jQuery不再对弹出窗口或缩略图起作用。我搜索了许多论坛来寻找有关此问题的信息,但是由于对jQu

  • 问题内容: 我想知道为什么$(this)在jQuery ajax调用后不起作用。 我的代码是这样的。 为什么在ajax调用之后,$(this)在这种情况下不起作用?如果我在ajax之前使用它会起作用,但之后没有效果。 问题答案: 在jQuery ajax回调中,“ this”是对ajax请求中使用的选项的引用。它不是对DOM元素的引用。 您需要首先捕获“外部” $(this) :

  • 问题内容: 我已经阅读了一些有关我的问题的信息,但仍然没有得到正确的答案。我尝试了.on()方法仍然无法正常工作。我正在使用Laravel。 JS 加载页面后,我想要的所有东西都可以正常工作,但是当我使用replaceWith()方法更新元素,然后onclick无法正常工作时。 我检查了更新的html和属性,所有这些都在正确的位置。 问题答案: 您需要使用事件委托:- 因此更改::- 至::- 所

  • 我正在尝试以编程方式更改页面。这第一行代码正在工作,但我不需要它延迟,所以我尝试了第二行,但它不起作用。我错过了什么? 工作(但我不想延迟): 不工作: 我在<代码>中调用它

  • 问题内容: 我对jQuery函数创建的新元素的“点击”操作有问题,它不起作用。 我为此链接创建了一个JSFiddle,但是它不能完美运行,因为我无法在JSFiddle中调用Ajax请求。 我有两个按钮 首次调用ajax函数时,一个按钮会回答以下输出: 按钮二仅用于擦除。按钮一创建。 当我单击此新按钮时,ajax函数将返回此按钮, 第一个按钮消失,第二个按钮回来。现在存在问题所在,如果我单击第一个按