单击按钮时不调用JQuery函数

use*_*163 0 html jquery

我有以下标记/代码

<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<title>Demo</title>

   <script src="directory for jquery script">
    $(document).ready(function () {
        $("button").on('click', 'test', function() {

            var webserUrl = "http://wsf.cdyne.com/WeatherWS/Weather.asmx";
            var soapRequest = '<ns1:GetWeatherInformation     xmlns:ns1=\'http://ws.cdyne.com/WeatherWS/\' />';
            $.ajax({
                type: "POST",
                url: webserUrl,
                contentType: "text/xml",
                dataType: "xml",
                data: soapRequest,
                success: SuccessOccur,
                error: ErrorOccur
            });
        });
    });
    function SuccessOccur(data, status, req) {
        if (status == "success")
            alert(req.responseText);
    }
    function ErrorOccur(data, status, req) {
        alert(req.responseText + " " + status);
    }
</script>

</head>
<body>



<button id="test">Test</button>
Run Code Online (Sandbox Code Playgroud)

点击测试按钮我希望发送肥皂请求,但由于某种原因,当我点击按钮没有任何反应时,我可以确认它正在点击jquery.js(2.1.1).

我确信这是一个愚蠢的错误,但我没有看到它,我有的代码(这是一个返工版本)工作正常,但这段代码没有.

大大收到任何帮助来挑选问题.

Gon*_*ing 10

错字#test.id选择器需要#前缀.

$("button").on('click', '#test', function() {
Run Code Online (Sandbox Code Playgroud)

是的,这是一个愚蠢的错误.我把这种情况称为代码失明..看了它这么久你再也看不到问题了:)

重要更新

您目前正在滥用委派的事件处理程序.我认为这有充分的理由(比如动态替换页面内容),否则你可以简化处理程序,但这太麻烦了.

当前处理程序不会在动态内容中存活,因为它button直接绑定到s,然后应用过滤器.如果动态添加/替换按钮,则它们不会绑定到新按钮.

一个适当的委托事件处理程序将是

$(document).on('click', 'button#test', function() {
Run Code Online (Sandbox Code Playgroud)

或者,因为它是一个id查找,简单地说

$(document).on('click', '#test', function() {
Run Code Online (Sandbox Code Playgroud)

委托事件处理程序通过侦听事件(在这种情况下click)冒泡到不变的祖先(document如果没有其他方便的话.'body'由于样式问题,因为它有点击错误),然后它将一个jQuery选择器应用于冒泡元素,然后它将函数应用于导致事件的任何匹配元素.这将允许它处理代码运行时不存在的元素,但在事件发生时将存在(非常方便).

笔记:

由于Pete TNT还指出,脚本块不会出现有效.请检查一下:)