【问题标题】:JavaScript code editingJavaScript 代码编辑
【发布时间】:2014-12-09 10:16:07
【问题描述】:

对不起,如果这是一个愚蠢的问题,我正在用 JQuery 做一个项目,我没有时间实际学习它,所以我直接跳进去了。

所以我正在编辑一段代码,原来是这样的:

$('#login').click(login);

因此,当单击登录按钮时,将调用登录函数。添加行:

$('#login').click();

该行按预期工作后,触发点击,然后运行登录功能。但只需将这两行替换为:

login();

HTML

<form action="#">
    <div class="form-group">
        <input type="text" id="nickname" class="form-control" placeholder="Enter nickname" autofocus> 
   </div> 
   <button type="submit" id="login" class="btn btn-primary btn-block">Connect</button>   
</form>

Javascript

var elem = document.getElementById("nickname"); 
elem.value = "tom"; 
$('#login').click(login); 
$('#login').click();

根本不工作?我不明白。当然我只是调用函数并绕过必须在 DOM 中拥有实际按钮?

更新 我确实在下面定义了函数登录,点击函数在代码本身中,我只是觉得没有必要在此处发布该代码,因为它只是调用了问题所在的函数。

更新 2 这是正在调用的登录函数:

function login(event) {

    event.preventDefault();

    params = {
        login: $('#nickname').val(),
        password: '123123123' // default password
    };

    // check if user did not leave the empty field
    if (trim(params.login)) {
        $('#loginForm form').hide();
        $('#loginForm .progress').show();

        // chat user creation
        QB.users.create(params, function(err, result) {
            if (err) {
                onConnectFailed();
                alertErrors(err);
            } else {
                chatUser = {
                    id: result.id,
                    login: params.login,
                    pass: params.password
                };

                // chat user authentication
                QB.login(params, function(err, result) {
                    if (err) {
                        onConnectFailed();
                        alertErrors(err);
                    } else {
                        connectChat();
                    }
                });
            }
        });
    }
}

【问题讨论】:

  • 你在哪里/如何打电话给login()?它在哪里定义?显示更多代码以帮助您找到问题...
  • 所以表单在html文件&lt;form action="#"&gt; &lt;div class="form-group"&gt; &lt;input type="text" id="nickname" class="form-control" placeholder="Enter nickname" autofocus&gt; &lt;/div&gt; &lt;button type="submit" id="login" class="btn btn-primary btn-block"&gt;Connect&lt;/button&gt; &lt;/form&gt;中,我正在尝试用var elem = document.getElementById("nickname"); elem.value = "tom"; $('#login').click(login); $('#login').click();自己模拟表单的输入
  • 对不起,我不知道如何在 cmets 中更好地格式化...
  • 你应该把这些快照放在问题本身(你可以编辑它)...
  • @KVohra95 您可能在函数内部使用了this或eventobject。除非您显示该功能,否则我们无法确定。

标签: javascript jquery html dom button


【解决方案1】:

这取决于您调用login 函数的范围。

检查你在哪里有类似的东西

function login(){
   //some code
}

并确保调用函数的代码区域可以看到它。

阅读here

更新

查看您的代码,我可以看到您没有 login 函数,但您只是提交表单,因为登录输入的类型为“提交”。

试试吧

$("#idOfTheForm").submit();

假设

<form action="#" id="idOfTheForm">

更新 2

我认为您的代码缺少一些信息。正如您所说,如果您没有处理程序,就不可能发生某些事情。如果您没有 login 函数,也没有针对您的表单的操作,则不可能发生某些事情。也许您在其他文件中有一些其他代码。

更新 3

我认为您的login 函数中唯一的问题是它有 1 个参数输入,并且您在第一行代码中使用它(错误会中断执行)。

这样试试

function login(event) {

 if (event != null)   
     event.preventDefault();

//other code

}

然后简单地用login();调用它

【讨论】:

  • 嗨。是的,我在下面确实有一个登录功能,它被调用了。这样做的目的是避免必须在提交方法的代码中包含不必要的表单,这有点违背了这一点。不过感谢您的帮助
  • 您是否按照我在答案中写的那样将 id 添加到表单中?
  • 可能是表单的操作,因为它是空的action="#"。你从那里删除了一些东西吗?
  • 这与以前的操作相同。该操作在 click jquery 方法上正常工作
  • 我已经更新了我的答案。您的代码中缺少某些内容
【解决方案2】:

$('#login').click() 就像一个触发器;当用户在#login 上启动时,它会在 () 内启动代码

$( "#login" ).click(function() {
  alert( "Handler for .click() called. on login" );
});

如果你只是这样做

function login(){}

会有一个函数可以做你想做的工作,但是这个函数永远不会被调用。

如果你这样做

function login(){}
login();

这表示您有一个功能可以完成您想要的工作,并且该功能在代码运行时启动,而不是在用户单击某物时启动。

【讨论】:

  • 什么是“那个”?你到底想要什么?
  • 抱歉,我确实做了问题中的内容,但它在原始问题中不起作用。我正在尝试调试它无法在这里工作的原因,但似乎没有人知道为什么
【解决方案3】:

当你这样做时

$('#login').click(login);

您是在告诉您希望将 login() 函数作为“login”元素上的事件“click”的处理程序调用。

在上面的代码中,我看不到您在哪里定义了 login() 函数。如果您执行 login() 并且“什么都没有发生”,那是因为该函数不是从您调用它的地方定义的......

您的 HTML 代码中的某处应该有一个如下所示的快照:

<script>
    function login(...){
     //....body....
    }
</script>

【讨论】:

  • 更不用说 $().click() 会将事件作为参数传递给函数。
  • 登录函数与调用它的js在同一个文件中定义。 @Kroltan 它确实有一个事件作为参数!我没有意识到该事件是由点击生成的。有没有办法在没有点击动作的情况下创建事件?谢谢
  • 是的,调用一次点击动作并打印事件参数。然后,当您在没有 jQuery 单击的情况下调用它时,将类似于(具有相同属性)的参数传递给该函数。
  • @Kroltan 谢谢,事件是 [object Object] 似乎没有解决我的问题
  • 不要提醒它,做一个console.log,然后在控制台中点击它。它将显示整个对象。或者,使用JSON.stringify 打印其 JSON 表示
【解决方案4】:

在前两种情况下,您的函数 login() 被写入了元素“login”的 id。但在最后一种情况下,您的代码中只有一个未被您调用的函数。所以,它不起作用。

for first two cases i think your  code is some thing like 
<div id="login">login</div>
<script>
 $('#login').click(function(){
  //some code
 });
</script>

你可以在这里找到类似的问题(jQuery.click() vs onClick)。 对于第三个,login() 没有被触发

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    相关资源
    最近更新 更多