有几个jquery的问题想向大家请教下,以下是代码,功能很简单,有一个按钮,本身的value是CheckMsg,在我点第一下的时候会进行检查信息操作(此操作未写在代码里),同时将value值改为SendMsg,然后再点一下,就会进行发送信息操作。
$(document).ready(function () {
            $("#btSendMsg").click(function () {
                if ($("#btSendMsg").attr("value") == "CheckMsg") {
                    alert($("#btSendMsg").attr("value"));
                    $("#btSendMsg").attr("value", "SendMsg");
                    alert($("#btSendMsg").attr("value"));
                    
                }
                else {
                    SendMsg();
                } 
            });
    });现在我遇到几个问题,应该是我对JQUERY里面的一些机制不太熟悉,但是这几天也查了很多资料,没什么头绪,现在在这里向大家请教下:
1.我用IE7进行调试的时候,我按了按钮,结果直接实现了SendMsg(),也就是说本来判定应该成功的却判定失败了,不知道为什么。
2.我在IE8和firefox中调试的时候,倒是成功了,页面分别弹出CheckMsg和SendMsg两个值,但是这时候页面刷新了,我再按的时候又重新弹出了这两个值,也就是这样我会一直处于检查信息状态,这就让我很郁闷,因为JAVASCRIP没基础,这次是边学边做的,所以想会不会是JAVASCRIP有什么机制我不知道的,所以想问问大家。

解决方案 »

  1.   

    $("#btSendMsg").attr("value");
    //全都修改为:
    $("#btSendMsg").val();
      

  2.   

    $("#btSendMsg").attr("value", "SendMsg");
    //改为:
    $("#btSendMsg").val("SendMsg");
      

  3.   

    ie下正常啊
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="content-type" content="text/html; charset=gb2312">
    <title> new document </title>
    <meta name="keywords" content="">
    <meta name="description" content="">
    <script type="text/javascript" src="js/jq.js"></script>
    </head>
    <script type="text/javascript">
    <!--
    $(document).ready(function () {
      $("#btSendMsg").click(function () {
      if ($("#btSendMsg").attr("value") == "CheckMsg") {
      alert($("#btSendMsg").attr("value"));
      $("#btSendMsg").attr("value", "SendMsg");
      alert($("#btSendMsg").attr("value"));
        
      }
      else {
      SendMsg();
      }  
      });
      });
    function SendMsg () {
    alert(1);
    }
    //-->
    </script>
    <body>
    <input type="button" value="CheckMsg" id="btSendMsg"/>
    </body>
    </html>
      

  4.   


    为什么呢?我看的jqeury书上就说的用attr获取和修改属性值啊。
    val()是不是专门针对value这个属性才能用啊?
      

  5.   

    是的,可以这么理解,手册中有这么一句:
    The .val() method is primarily used to get the values of form elements. 
    (.val()方法主要用来获取表单元素的值。)
      

  6.   


    这样啊,那attr为什么不行呢?
    还有我用你的方法后还是刷新页面并且button返回原来的值了,也就是没解决。。
    BUTTON那句代码是这样的:
    <button id = "btSendMsg"  value="CheckMsg">检查信息</button>
    是不是这样的话每刷新一次页面就会变回原来的value值了?
    每次按完按钮后刷新是因为alert执行的问题么?
      

  7.   

    刷新页面?怎么刷新的?刷新后想怎么样,按钮的值保持为"SendMsg"?
      

  8.   


    我就是问一下刷新后是不是就变回原来值了?还有是否执行完alert后就会自动刷新页面?
      

  9.   

    刷新后当然就变成初始值了,相当于重新打开这个页面了。点击后自动刷新,是不是把button标签放在表单(form)里了?如果你不想让表单刷新,可以这样:
    <form onsubmit="return false;">
      

  10.   


    你一提,我试了下,我把button放在了form之外,成功了。。我再说下我的本意吧,我想点第一下的时候将value值改为SendMsg,然后再点一下,就会进行发送信息操作。
    但我现在遇到的问题是,我点了一下后,出现alert的窗口,我点击确定后,系统执行完按钮绑定的jquery方法后,会刷新,我的button值又回去了。之前我想问下是不是alert后会重新载入也页面,但是现在把button放在form外面后发现正常了,所以我想问是不是因为我的body有onload事件,所以导致执行完jquery的方法后表单刷新了?
      

  11.   

    写程序不能就技术本身而论技术本身,主要的是要围绕主要的业务逻辑,选取最经济最适合的技术路线才对。你顶楼所述的需求,哪里用得到什么改变按钮的value还要点两次按钮呢?假设你的发送信息是通过表单发送:
    <script>
    function CheckMsg(f){
      if(f.a.value==''){
        alert('不能为空!');    return false
      }
    }
    </script>
    <form method=post action="xxx.asp" name=frm onsubmit="return CheckMsg(this)">
    <input type=text id=a name=a />
    <input type=submit id=s name=s value='发送信息' />
    </form>这样就可以了呀
      

  12.   

    不高兴用表单的onsubmit(),你也可以用按钮的onclick()
    <script>
    function CheckMsg(f){
      if(f.a.value==''){
      alert('不能为空!'); return false
      }
    }
    </script>
    <form method=post action="xxx.asp" name=frm >
    <input type=text id=a name=a />
    <input type=submit id=s name=s value='发送信息' onclick="return CheckMsg(this.form)" />
    </form>
      

  13.   


    我好像发现问题了,我说下你看看我对不对好么?
    我之前用的<button>检查信息</button>来定义的按钮,这样好像就被默认为<asp:Button>的格式了,导致我点一下这个按钮就会提交一次表单,然后刷新表单,现在我用的<input type="button" id = "btSendMsg"  value="检查信息"></button> 这种button点击后就不会提交表单了,这样我修改的value值就还在了。
      

  14.   


    我好像发现问题了,我说下你看看我对不对好么?
    我之前用的<button>检查信息</button>来定义的按钮,这样好像就被默认为<asp:Button>的格式了,导致我点一下这个按钮就会提交一次表单,然后刷新表单,现在我用的<input type="button" id = "btSendMsg" value="检查信息"></button> 这种button点击后就不会提交表单了,这样我修改的value值就还在了。
      

  15.   

    <input type="submit" id="btn" />

    <button></button>
    都会触发submit提交表单 刷新<input type="button" />则不会默认提交表单
      

  16.   


    触发submit提交表单的按钮:
    <input type="submit"> 
    <input type="image">
    <button></button>不提交表单的按钮:
    <input type="button">
    <input type="reset">
      

  17.   

    要刷新页面也能保存状态。可以用cookie