Jquery的乱七八糟
本人暂时只会PHP,C#处于学习阶段
对于PHP而言,JS始终是一个不可少的部分,所以,虽然对JS深恶痛绝,但是却不得不学~~
在这个浏览器标准完全不统一的阶段,要使得JS对于每个浏览器的支持都还不错,那么框架是个很好的选择——在底层帮你把一些需要注意的东西都写好了~
何乐不为?
JQuery,上~
对于JQery,我只想稍微做一个笔记性质的东西,方便自己日后的查阅。
对于Jquery的选择器,我不想多说什么,仅仅是想说一下$(”a”)、$(”.stuff”)和$(”#clickme”)的区别
第一个的选择是对于整个DOM属性的选择,第二个选择是对于class为stuff进行选择,而最后一个是对于id为clickme的元素进行选择~~
就是这样子~
然后来说一个比较cool的应用
见代码
- $(document).ready(function() {
- $('#faq').find('dd').hide().end().find('dt').click(function() {
- var answer = $(this).next();
- if (answer.is(':visible')) {
- answer.slideUp();
- } else {
- answer.slideDown();
- }
- });
- });
这个里面涉及到了一个高级应用end()的问题。end()这里简化了我们反复选择的痛苦,在第一次find条件之后,我们继续进行查找,从而找到我们需要的东西。next()的出现使得我们find(’dt’)之后接着find(’dd’)从而完成了一个循环的查找。hide()帮助我们查找到我们需要的东西后直接帮我们设置为隐藏状态,或者说折叠起来的状态。或者这么说,end和next形成了一个循环,帮助我们把我们需要的
对于JQuery的Ajax来说也是一个简单的事情,看一个例子
- $(document).ready(function() {
- // generate markup
- var ratingMarkup = ["Please rate: "];
- for(var i=1; i <= 5; i++) {
- ratingMarkup[ratingMarkup.length] = "<a href='#'>" + i + "</a> ";
- }
- // add markup to container and applier click handlers to anchors
- $("#rating").append( ratingMarkup.join('') ).find("a").click(function(e) {
- e.preventDefault();
- // send requests
- $.post("rate.php", {rating: $(this).html()}, function(xml) {
- // format result
- var result = [
- "Thanks for rating, current average: ",
- $("average", xml).text(),
- ", number of votes: ",
- $("count", xml).text()
- ];
- // output result
- $("#rating").html(result.join(''));
- } );
- });
- });
我们关键看一下对于$.post的处理
三个参数第一个是post提交的地址,第二个是提交的参数,第三个比较特殊,说说。
第三个定义了一个function,这个function以xml作为参数~但是这个xml是怎么来的呢?是我们提交给上述网址之后,那个网址(本例是rate.php)返回回来的(其实就是echo出来的东西啦)的xml格式的文本。在function中还有一个用法是$(”average”,xml).text() 我也来说一下,前面的$(”average”,xml)其实是rate.php返回回来的xml文本中的average节点的数据!!后面的text方法就不说了,将取出来的数据转化为文本格式。
再来说一下使用Jquery来进行表单验证吧(估计这个也是JS最为人知的地方了)
我们需要down一个JQuery的插件下来,jquery.validate.js。将其包含到我们的HTMl文件中去(不要忘记了,这个文件包含位置一定要在JQuery.js下面,怎么说也是靠JQuery吃饭的;)
好了是吧?那我们现在看一下一个简单的例子吧~
- $(document).ready(function(){
- $("#validateform").validate();
- })
JQuery的事情完了
再看看HTML我们要做什么
- <form class="cmxform" id="validateform" method="get" action="">
- <fieldset>
- <legend>A simple comment form with submit validation and default messages</legend>
- <p>
- <label for="cname">Name</label>
- <em>*</em><input id="cname" name="name" size="25" class="required" minlength="2" />
- </p>
- <p>
- <label for="cemail">E-Mail</label>
- <em>*</em><input id="cemail" name="email" size="25" class="required email" />
- </p>
- <p>
- <label for="curl">URL</label>
- <em> </em><input id="curl" name="url" size="25" class="url" value="" />
- </p>
- <p>
- <label for="ccomment">Your comment</label>
- <em>*</em><textarea id="ccomment" name="comment" cols="22" class="required"></textarea>
- </p>
- <p>
- <input class="submit" type="submit" value="Submit"/>
- </p>
- </fieldset>
- </form>
完成
注意看一下input输入框class内容~那个就是对于输入框限定的条件,比如看这个
- <input id="cemail" name="email" size="25" class="required email" />
就给出了限定条件是required和email,需要满足这两个条件~~
是不是很简单?
但是有没有觉得这样子有些不爽?还需要在页面上进行修改?OK!我们看一下别的
- // validate signup form on keyup and submit
- $("#signupForm").validate({
- rules: {
- firstname: "required",
- lastname: "required",
- username: {
- required: true,
- minlength: 2
- },
- password: {
- required: true,
- minLength: 5
- },
- confirm_password: {
- required: true,
- minlength: 5,
- equalTo: "#password"
- },
- email: {
- required: true,
- email: true
- },
- topic: {
- required: "#newsletter:checked",
- minLength: 2
- },
- agree: "required"
- },
- messages: {
- firstname: "Please enter your firstname",
- lastname: "Please enter your lastname",
- username: {
- required: "Please enter a username",
- minLength: "Your username must consist of at least 2 characters"
- },
- password: {
- required: "Please provide a password",
- minLength: "Your password must be at least 5 characters long"
- },
- confirm_password: {
- required: "Please provide a password",
- minLength: "Your password must be at least 5 characters long",
- equalTo: "Please enter the same password as above"
- },
- email: "Please enter a valid email address",
- agree: "Please accept our policy"
- }
- });
- // propose username by combining first- and lastname
- $("#username").focus(function() {
- var firstname = $("#firstname").val();
- var lastname = $("#lastname").val();
- if(firstname && lastname && !this.value) {
- this.value = firstname + "." + lastname;
- }
- });
- //code to hide topic selection, disable for demo
- var newsletter = $("#newsletter");
- // newsletter topics are optional, hide at first
- var inital = newsletter.is(":checked");
- var topics = $("#newsletter_topics")[inital ? "removeClass" : "addClass"]("gray");
- var topicInputs = topics.find("input").attr("disabled", !inital);
- // show when newsletter is checked
- newsletter.click(function() {
- topics[this.checked ? "removeClass" : "addClass"]("gray");
- topicInputs.attr("disabled", !this.checked);
- });
- });
再看HTML代码
- <form class="cmxform" id="signupForm" method="get" action="">
- <fieldset>
- <legend>Validating a complete form</legend>
- <p>
- <label for="firstname">Firstname</label>
- <input id="firstname" name="firstname" />
- </p>
- <p>
- <label for="lastname">Lastname</label>
- <input id="lastname" name="lastname" />
- </p>
- <p>
- <label for="username">Username</label>
- <input id="username" name="username" />
- </p>
- <p>
- <label for="password">Password</label>
- <input id="password" name="password" type="password" />
- </p>
- <p>
- <label for="confirm_password">Confirm password</label>
- <input id="confirm_password" name="confirm_password" type="password" />
- </p>
- <p>
- <label for="email">Email</label>
- <input id="email" name="email" />
- </p>
- <p>
- <label for="agree">Please agree to our policy</label>
- <input type="checkbox" id="agree" name="agree" />
- </p>
- <p>
- <label for="newsletter">I'd like to receive the newsletter</label>
- <input type="checkbox" id="newsletter" name="newsletter" />
- </p>
- <fieldset id="newsletter_topics">
- <legend>Topics (select at least two) - note: would be hidden when newsletter isn't selected, but is visible here for the demo</legend>
- <label for="topic_marketflash">
- <input type="checkbox" id="topic_marketflash" value="marketflash" name="topic" />
- Marketflash
- </label>
- <label for="topic_fuzz">
- <input type="checkbox" id="topic_fuzz" value="fuzz" name="topic" />
- Latest fuzz
- </label>
- <label for="topic_digester">
- <input type="checkbox" id="topic_digester" value="digester" name="topic" />
- Mailing list digester
- </label>
- <label for="topic" class="error">Please select at least two topics you'd like to receive.</label>
- </fieldset>
- <p>
- <input class="submit" type="submit" value="Submit"/>
- </p>
- </fieldset>
- </form>
怎么样?是不是JS代码和HTML完全分开了?不需要对HTML进行修改,在JS中进行设置就OK啦~
在JQuery中对rules和messages分别进行了定义,这样子就不需要在HTML进行设置了(个人比较推崇后一种,JS和HTML分离)