gpt4 book ai didi

javascript - 将所有代码放在 `$(document).ready` 中是否安全?

转载 作者:搜寻专家 更新时间:2023-11-01 04:50:32 25 4
gpt4 key购买 nike

我在我的一个小项目中使用 jQuery,这是我第一次使用它。将我所有的 UI 代码放在 $(document).ready() 中是否安全?我基本上是在创建一个在按下按钮时弹出的表单,并且该表单是通过 AJAX 处理的。基本上,当我将 AJAX 函数与控制 UI 的函数分开时,AJAX 不起作用。但是,当我将它们都放在 $(document).ready() 中时,一切正常。这是我的代码。请忽略我的评论,因为它们是出于学习目的。

$(document).ready(function(){ //ready for DOM manipulation

/*FORM UI*/
var container_form=$('#container_form'); //container form box
var addButton=$('.addButton'); //"+" add button
container_form.hide(); //initially hides form
$(addButton).click(function(){
$(container_form).toggle('fast');

/*SUBMISSION AJAX*/
$('form.ajax').on('submit',function() { //Make form with class "ajax" a JQuery object

var that = $(this), //"that"-current form, "url"-php file, "type"-post, "data"-empty object for now
url=that.attr('action'),
type=that.attr('method'),
data={};

that.find('[name]').each(function(index,value){ //search all elements in the form with the attribute "name"
var that=$(this), //legal attribute
name=that.attr('name'); //name of the legal attribute
value=that.val(); //value of text field in legal attribute
data[name]=value; //data object is filled with text inputs
});


$.ajax({
url: url, //url of form
type: type, //type of form
data: data, //data object generated in previous
success: function(response){ //reponse handler for php
if(!response){
console.log("Error");
}
console.log(response);
}

});


return false; //Stops submission from going to external php page.
});
});
});

最佳答案

通常是任何选择器,例如 $('form.ajax').$('#container_form')$('.addButton') 需要在 doc.ready 中以确保 DOM 准备就绪,然后再尝试从中选择一个元素,因为如果 DOM 尚未完成处理,它可能找不到该元素.所以这几乎适用于您的所有代码。如果你有这样的功能:

//defines a function
function addThem(first,second)
{
return first + second;
}

您可以在 doc ready 之外声明它,并在 doc ready 内调用它。

$(document).ready(function(){
$('#someInput').val(
addThem( $('#anotherInput').val() , $('#thirdInput').val() )
);
});

我的想法是,文档准备就绪是一个事件,因此您应该响应“文档现在已准备好供您查询事件”,而不是声明事情。声明函数只是说明了该函数的作用,但实际上并没有做任何事情,因此它可以在文档之外准备就绪。在 doc.ready 中声明这个函数是非常愚蠢的,因为它可以在任何时候定义(虽然它当然可以将它放在 doc ready 中,但它通常会使事情变得困惑)。即使它正在选择一个元素,该代码在调用它之前也不会真正运行:

function hideContainer()
{
//this code never runs until the function is called
//we're just defining a function that says what will happen when it is called
return $('#container').hide();
}

$(document).ready(function(){
//here we are calling the function after the doc.ready, so the selector should run fine
hideContainer();
});

请注意,连接到其他事件的行为本身就是一个 Action ,例如当您订阅点击事件和表单提交事件时。你是说,“找到带有 .ajax 类的表单元素,并订阅它的提交事件”。在 DOM 处理完成之前,您不想尝试连接 DOM 元素的事件。如果浏览器正在处理 DOM,它们可能还不“存在”,因此您连接到点击/表单提交事件的尝试可能失败。我说可能是因为取决于时间/处理滞后,它有时可以工作,有时不能。

关于javascript - 将所有代码放在 `$(document).ready` 中是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18647548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com