JQuery忽略click()和change()

提前说明:我已经看过,看过并尝试过SO问题中的解决方案:Jquery复选框更改和单击事件。 SO上的其他人更多的是阅读价值观,而不是事件没有解决的问题。

我承认我是JQuery的新手。

我正在尝试做两个更改。 一个是文本字段发生变化,另一个是复选框被切换。 两者都在一个表格内。 这个想法是,如果文本字段改变了计算,并且复选框后的返回值被写入文本。 该复选框打开和关闭该文本。 一旦完成表格可以提交。

代码(如下所示)也使用php。

我已经拉出了相关的代码。 我在线上阅读了几个例子,所以有尝试使用

  • <span id =“foo”> <input> </ span>
  • <input class ='romanCheck'id ='romanCheck'type ='checkbox'>
  • 警报都没有被调用。 JSFiddle有点儿在PHP上进行了讨论。 对于复选框,我已经尝试了.change()和.click()

    我测试过的浏览器都是Mac(我的开发环境)

  • Safari:7.0.3(9537.75.14)
  • Chrome:33.0.1750.152
  • Firefox:28.0
  • 我附上了相关的代码。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>Not Working.php</title>
        <link rel="stylesheet" href="jquery-ui-1.10.4.custom/css/ui-lightness/jquery-ui-1.10.4.custom.css">
        <script src="jquery-ui-1.10.4.custom/js/jquery-1.10.2.js"></script>
        <script src="jquery-ui-1.10.4.custom/js/jquery-ui-1.10.4.custom.js"></script>
    </head>
    <body>
    <script>
    function romanize (num) {
        return "(" + "roman for " + ")";
    }
    
    $(document).ready(function(){
    
        $(".romanCheck").live("change",function() {
            alert("#romanCheck.click has been hit");
            var romanValue = "";
            var roman = $("#romanCheck").is(':checked');
            if ( roman ) {
                var itValue = $(this).val();
                romanValue="(" + romanize(itValue) +")";
            }
            $("#romanDisplay").text(romanValue);
        });
    
        $("span.iterationField input").live("change",function() {
            alert("#iteration.change has been hit");
            var romanValue = "";
            var roman = $("#romanCheck").is(':checked');
            if ( roman ) {
                var itValue = $(this).val();
                romanValue="(" + romanize(itValue) +")";
            }
            $("#romanDisplay").text(romanValue);
        });
    });
    
    </script>
    <form action='EventValidateProcess.php' method='post'>
    <?php
        $doesShow = 1;
        $isRoman = 1;
        $iteration - 13;
        print "<table>n";
        print "<tr>nt<td>Iteration</td>nt";
        print "<td><span id='iterationField'><input type='text' name='iteration' value='" . $iteration . "'></span></td>nt";
        print "<td><input type='checkbox' name='doesShow' value='1'";
        if ($doesShow == 1) {
            print " checked";
        }
        print "> visible | ";
    
        print "n<input class='romanCheck' id='romanCheck' type='checkbox' name='isRoman' value='1'";
        if ($isRoman == 1) {
            print " checked";
        }
        print "> uses Roman numeralsn";
        print "<span id='romanDisplay'>(XX)</span></td>n</tr>n";
    ?>
    </table>
    <button type='submit' name='process' value='update'>Update</button><br/>
    </form>
    </body>
    

    .live()弃用:1.7,删除:1.9

    像使用jquery-1.10.2一样使用.on()

    句法

    $( elements ).on( events, selector, data, handler );
    

    $(document).on("change", "span.iterationField input" ,function() { //code here });
    $(document).on("change", ".romanCheck" ,function() { //code here });
    

    span.iterationField不存在,而是使用span#iterationField,并使用:

    $(document).ready(function(){
        $("input.romanCheck").on("change",function() {
            alert("#romanCheck.click has been hit");
            var romanValue = "";
            var roman = $("#romanCheck").is(':checked');
            if ( roman ) {
                var itValue = $(this).val();
                romanValue="(" + romanize(itValue) +")";
            }
            $("#romanDisplay").text(romanValue);
        });
    });
    

    注意:确保jquery库在导入


    经过大量的努力,似乎最有效的答案如下:

        $(document).change("input.romanCheck", function() {
            var romanValue = "";
            var roman = $("#romanCheck").is(':checked');
            if ( roman ) {
                var itValue = $("#iterationField").val();
                romanValue="(" + romanize(itValue) +")";
            }
            $("#romanDisplay").text(romanValue);
        });
    
        $(document).change("input.iterationField", function() {
            var romanValue = "";
            var roman = $("#romanCheck").is(':checked');
            if ( roman ) {
                var itValue = $("#iterationField").val();
                romanValue="(" + romanize(itValue) +")";
            }
            $("#romanDisplay").text(romanValue);
        });
    

    使用:

        print 
        "<input id='iterationField' type='text' name='iteration' value='";
        print $iteration . "'/>";
    
        print 
        "<input id='romanCheck' type='checkbox' name='isRoman' value='1'";
        if ($isRoman == 1) {
            print " checked";
        }
        print ">";
    
        print "<span id='romanDisplay'>";
        if ($isRoman == 1) {
            print "(" . $romanIteration . ")";
        }
        print "</span>";
    
    链接地址: http://www.djcxy.com/p/56023.html

    上一篇: JQuery ignoring click() and change()

    下一篇: Click event doesn't fire after ajax event