【问题标题】:Need some resoultion. Javascript function not being called in click event in jquery需要一些解决办法。 jquery的点击事件中没有调用Javascript函数
【发布时间】:2010-04-10 22:01:32
【问题描述】:

我试图从我的 javascript 代码中调用名为 isUrgencyTypeValid 的函数,但它不起作用。请检查我的代码中有什么问题。 应该显示未显示的警报

我的 javascript 函数没有被调用。

HTML 代码

       <td colspan="2" align="center"><input id="btnSubmit" type="submit" value="submit" runat="server"/></td></tr>

jQuery 调用函数

        $("#btnSubmit").bind("click",function(){
        alert(); // this is running
        isUrgencyTypeValid();

        });

javascript实现函数

function isUrgencyTypeValid()
    {
        alert("asd");
        var i=0;
        for(i=0;i<$("radio[name='urgencyType']").length;i++)
            {
            if($("radio[name='urgencyType']")[i].checked)
                {
                alert($("radio[name='urgencyType']")[i].value);                 
                return true;
            }           
        return false;
    }   

更多关于我的表单的描述在这里

<form runat="server" name="myPage">
    <table style="width: 100%;" cellpadding="5" cellspacing="5">
        <caption>
            Computer Support / Service Request
        </caption>
        <tr><td>First Name</td>
            <td><input id="txtFirstName" type="text" value="First Name" runat="server"/><span class="error"></span></td></tr>

        <tr>
            <td>Last Name</td>
            <td><input id="txtLastName" type="text" value="Last Name" runat="server"/><span class="error"></span></td></tr>

        <tr>
            <td>Email Address</td>
            <td><input id="txtEmailAddress" type="text" value="Email Address" runat="server"/><span class="error"></span></td></tr>    

        <tr>
            <td>Phone No</td>
            <td><input id="txtPhoneNo" type="text" value="Phone No" runat="server" /><span class="error"></span></td></tr>

        <tr>
            <td>Do you have text messaging</td>
            <td>
                <span>Yes</span><input id="rdoYes" value="Yes" type="radio" runat="server"/>
                <span>No</span><input id="rdoNo" value="No" type="radio" runat="server"/><span class="error"></span>
            </td></tr>

        <tr>
            <td>Description of request*: </td>
            <td><textarea id="txtDescription" cols="50" rows="10" runat="server"></textarea><span class="error"></span><span id="lengthCount"></span></td></tr>

        <tr>
            <td>Urgency of this support request:</td>
            <td>
                <input id="rdoAnyTime" name="urgencyType" value="Anytime" type="radio" runat="server"/><span>Anytime</span><br />
                <input id="rdoCplDays" name="urgencyType" value="In the next couple of days" type="radio" runat="server"/><span>In the next couple of days</span><br />
                <input id="rdoToday" name="urgencyType" value="Today" type="radio" runat="server"/><span>Today</span><br />
                <input id="rdoUrgent" name="urgencyType" value="This is extremely urgent...I cannot wait!" type="radio" runat="server"/><span>This is extremely urgent...I cannot wait!</span><br />
                <input id="rdoTalkSometime" name="urgencyType" value="Please contact me and we'll talk about it" type="radio" runat="server"/><span>Please contact me and we'll talk about it</span><br /><span class="error"></span>
            </td></tr>

        <tr>
            <td colspan="2" align="center">Captcha To Be implemented.</td></tr>

        <tr>
            <td></td>
            <td><input id="chkRequestCopy" type="checkbox" runat="server"/>Please send me a copy of this service request</td></tr>

        <tr>
            <td colspan="2" align="center"><input id="btnSubmit" type="submit" value="submit" runat="server"/></td></tr>

    </table>    
</form>   

【问题讨论】:

  • (没有radio这样的元素。)
  • @bobince:在我的表单中,我也在使用单选按钮,我想对其进行验证
  • 我认为问题不在于 bining,可能在到达 bind 语句之前发生了一些错误。请您查看事件绑定之前的声明
  • 请安装 firebug。
  • @M28:好的,先生。我刚刚在 6 小时前格式化了我的电脑。仍在安装许多组件。

标签: php javascript jquery html jquery-validate


【解决方案1】:

我复制了您的代码并遇到了同样的问题。然后我仔细看了看,发现您的 isUrgencyTypeValid() 函数中缺少右括号。缺少 for 循环的右括号。 Firefox 错误控制台也会显示这一点。

一旦我添加了括号,警报就会正常工作。

function isUrgencyTypeValid()
{
    alert("asd");
    var i=0;
    for(i=0;i<$("radio[name='urgencyType']").length;i++)
        {
        if($("radio[name='urgencyType']")[i].checked)
        {
            alert($("radio[name='urgencyType']")[i].value);                 
            return true;
        }  
    } //this was missing
    return false;
}   

【讨论】:

  • 我做错了什么。我在过去 3 个小时里一直在寻找错误。这对我来说真的很丢脸。感谢 Erikk 让我注意到这一点。还有 1 个问题:为什么这会影响上一步中给出的警报。据我所知,它应该已经打印出来了。有什么原因吗?
  • 我想你是在问为什么你的按钮点击的 alert() 不起作用?在绑定事件中定义的那个?由于您在 isUrgencyTypeValid() 函数中存在语法错误,因此它会影响页面上的所有 JavaScript 代码正常运行。 Firefox 错误控制台应该是你最好的新朋友。 :-) 或者,如果您正在运行 Firebug 并打开它的控制台,它也会显示所有错误。
【解决方案2】:

您的 radio 选择器不正确。

没有radio 元素,但 :radio pseudo-class selector

您的代码应为:

function isUrgencyTypeValid()
{
    alert("asd");
    var i=0;
    for(i=0;i<$("input[name='urgencyType']:radio").length;i++)
        {
        if($("input[name='urgencyType']:radio")[i].checked)
            {
            alert($("input[name='urgencyType']:radio")[i].value);                 
            return true;
        }           
    return false;
}

** 编辑 **

除了上面的变化,由于alert从未出现,这表明isUrgencyTypeValid没有被调用。

最可能的解释是,在将处理程序绑定到按钮的 click 事件之前,您不会等到 DOM 加载完毕。你应该有一些看起来像这样的代码:

$(function()
{
    /*
     * ... other code ...
     */

    $("#btnSubmit").bind("click",function(){
        isUrgencyTypeValid();
    });

    /*
     * ... other code ...
     */
}

【讨论】:

  • @Dancrumb,对不起,这段代码也不起作用。至少警报应该已经弹出。但我认为它甚至没有进入功能。控制到达我调用这个函数的 jquery 函数。但我不知道后来发生了什么。
  • @Shantanu,我对错误选择器的回答仍然有效,但如果警报甚至没有显示......那是另一回事。你什么时候绑定函数?您是否要等到 DOM 加载完毕后再进行绑定?
  • “您是否要等到 DOM 加载完毕后再进行绑定”我不知道。但是当我按下按钮时。它应该在 jqery 和 javascript 上显示一条警报消息,因为两者都在同一个事件中被调用。此外,javascript函数被jquery函数本身调用,即点击事件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-02-17
  • 1970-01-01
  • 2018-07-02
  • 2019-07-01
  • 2012-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多