javascript - Jquery 链接选择器由于某种原因无法工作

标签 javascript jquery

Jquery 没有选择 a 标记,并且虽然我在 Jquery 代码中选择了 a 标记,但不会阻止 a 标记默认操作。我只复制了代码的相关部分,以便人们可以告诉我出了什么问题。

Jquery 代码的其他部分,我选择其他链接工作......并且默认操作被阻止......下面是有问题的部分。

<?php
        header ("Cache-Control: no-cache, must-revalidate");    // HTTP/1.1
        header ("Expires: Sat 26 Jul 1997 05:00:00 GMT");       // Date in the past
        require_once ("../_includes/functions.php");
        ?>
        <link rel="stylesheet" title="Style CSS" href="../_reports/report_assets/cwcalendar.css" type="text/css" media="all" />
        <script src="../_js/jquery-1.6.2.min.js" type="text/javascript" charset="utf-8"></script>
        <script src="../_js/timer.js" type="text/javascript" charset="utf-8"></script>
        <script type="text/javascript" src="../_reports/report_assets/calendar.js"></script>
        <script type="text/javascript">
        $(document).ready(function(){
            $('#select').click(function(event){ 
                $(':checkbox').prop("checked", true);
                event.preventDefault();
            });
            $('#deselect').click(function(event){ 
                $(':checkbox').prop("checked", false);
                event.preventDefault();
            });

            $('#add').click(function() {
                var field = '<input class="project_fields" type="text" size ="30" name = field_settings[] /> &nbsp;&nbsp;&nbsp;&nbsp;';
                var checkbox = '<input class ="checkbox" type ="checkbox" name ="check_field[]" />&nbsp;&nbsp;&nbsp;';
                var delete_link = '<a class ="delete_link" style="text-decoration:none;" href="#"> Delete field </a> &nbsp;&nbsp;&nbsp;<br /><br />';
                var input = field + checkbox + delete_link;
                $('#input_fields').append(input);
            });

            $('div#input_fields a.delete_link').click(function(event) {
                event.preventDefault();
                alert('clicked !!!!');


            });

            $('#project_fields_submit').click(function() {
                var array_fields = new Array();
                $('.checkbox').each(function() {
                    if($(this) .is(':checked')) {
                        array_fields.push('1');
                    }
                    else {

                        array_fields.push('0');
                    }

                });
                $('#checkboxes').val(array_fields);
            });

            $('#edit_fields_submit').click(function() {
                var edit_fields = new Array();
                $('.edit_check').each(function() {
                    if($(this) .is(':checked')) {
                        edit_fields.push('1');
                    }
                    else {

                        edit_fields.push('0');
                    }

                });
                $('#edit_checkboxes').val(edit_fields);

            });

            $('#add_edit').click(function() {
                var new_field = '<input class ="edit_data" type="text" size ="40" name = edit_field_value[] value =""> &nbsp;&nbsp;&nbsp;';
                var new_checkbox = '<input class ="edit_check" type ="checkbox" name ="check_field[]" >&nbsp;&nbsp;&nbsp;';
                var delete_edit = '<a id ="new_delete_edit" style="text-decoration:none;" href="#" > Delete field </a><br><br>';
                var new_input = new_field + new_checkbox; 
                $('#new_input_fields').append(new_input);
                $('#new_input_fields').append(delete_edit);
            });


            $('a.delete_edit').click(function(event) {
                event.preventDefault();
                var ID = $(this).attr('id');
                var delete_field_id = 'edit_field'+ID;
                var field_data = $('#'+ delete_field_id).val(); 
                var project_id =  $('#edit_project_id').val();
                var string = {field : field_data, pid : project_id };
                $.ajax({
                    type: "POST",
                    url: "_ajax/delete_field.php",
                    data: string,
                    success: function(data){
                        $('#'+ID).remove();
                        $('#'+delete_field_id).remove();
                        $('#new_check'+ID).remove();
                    }
                });


            });


            $('#new_delete_edit').click(function(event) {
                alert("clicked !!!");
                event.preventDefault();
                 alert("Was preventDefault() called: " + event.isDefaultPrevented());
                $(this).hide();

            });


        });
</script>
<?php

function GetClientDropdown($pid){
    $data = "";
    $query = "SELECT cms_users.username, managers.user_id, managers.project_id, cms_users.status
    FROM cms_users
    INNER JOIN managers
    ON cms_users.user_id=managers.user_id AND managers.project_id='$pid' AND status!=1
    ORDER BY managers.user_id ASC";
    $result = mysql_query($query);

    $data .= '<form action="" method="POST" accept-charset="utf-8" onsubmit="SubmitClientSettings(event);">
    <select id="client_managers" onChange="GetClientInfo(this);">
    <option value="0">Select User';
    while ($row = mysql_fetch_assoc($result)){
        $data .= '<option value="' . $row['user_id'] . '">' . $row['username'];
    }
    $data .= '</select>';

    $data .= '<div id="manager_info"></div>';

    $data .= '</form>';

    return $data;
}

function GetStartDate($sid){
    $query = "SELECT start_date FROM shows WHERE show_id='$sid'";
    $result = mysql_fetch_assoc(mysql_query($query));
    return $result['start_date'];
}

function GetEndDate($sid){
    $query = "SELECT end_date FROM shows WHERE show_id='$sid'";
    $result = mysql_fetch_assoc(mysql_query($query));
    return $result['end_date'];
}


if (isset($_GET['pid']) && isset($_GET['user_id'])) {

    $id = $_GET['user_id']; 
    $pid = $_GET['pid']; 
    $show_id = $_GET['show_id']; 
    $query = "SELECT status FROM cms_users WHERE user_id='$id' LIMIT 1";
    $result = mysql_fetch_assoc(mysql_query($query));
    $status = $result['status']; 
    $start = GetStartDate($show_id); 
    $end = GetEndDate($show_id); 
    $pieces = explode ("-", $start);
    $year = $pieces [0];
    $month = $pieces[1];
    $day = $pieces[2];
    $day = $day + 0;
    $start = $year."-".$month."-".$day;

    $pieces = explode ("-", $end);
    $year = $pieces [0];
    $month = $pieces[1];
    $day = $pieces[2];

    $day = $day + 0;
    $end = $year."-".$month."-".$day;


    $query = "SELECT send_method FROM show_settings WHERE show_id='$show_id' LIMIT 1";
    $row = mysql_fetch_assoc(mysql_query($query));

    $auto = $manual = "";
    if ($row['send_method']){
        $auto = "checked";
    }else{
        $manual = "checked";
    }



    ?> 

    <?php echo '<!-- tab 1 --><div id="fragment-6" class="removable">';
    echo '<div id ="project_settings" style="display:none;">';
    echo '<div class="FormArea" style="min-height:600px;">';    

        $query_settings ="SELECT project_settings FROM projects WHERE project_id ='$pid'";
        $result_settings = mysql_query($query_settings);
        $row_settings = mysql_fetch_array($result_settings,MYSQL_ASSOC);
        if($row_settings['project_settings'] == NULL) {
            echo "<h2> Project Settings </h2>";
            echo "<br><br>";
            echo " <b> Add fields </b>";
            echo "&nbsp;&nbsp;";
            echo "<img id ='add' src='_assets/add.png' /><br><br><br>";
            echo '<form action ="" method="post">';
            echo'<input type="hidden" name="pid" value="'.$pid.'">';
            echo "<input id ='checkboxes' type ='hidden' name ='checkboxes' value ='' >";
            echo "<div id='input_fields'> </div>";
            echo '<input id ="project_fields_submit"  type ="submit" name ="project_fields_submit" class="button" value ="Save Settings" /><br><br>';
            echo '</form>';
            echo "<br><br><br><br><p></p>";
        }
        else  {
            echo "<h2> This Project Settings </h2>";
            echo "<br><br><br><br>";
            echo "<b> Add fields</b>&nbsp;&nbsp;<img id ='add_edit' src='_assets/add.png' /><br><br><br>";
            $fields_data = unserialize($row_settings['project_settings']); 
            $i = 0;
            echo '<form action ="" method="post">';
            echo'<input id ="edit_project_id" type="hidden" name="edit_project_id" value="'.$pid.'">';
            echo "<div id='new_input_fields'> </div>";
            echo "<input id ='edit_checkboxes' type ='hidden' name ='edit_checkbox' value ='' >";
            foreach ($fields_data as $key => $value) {
                if($value =="1") {
                    echo "<input id ='edit_field".$i."' class ='edit_data' type ='text' size ='40' name = edit_field_value[] value ='".$key."' />&nbsp;&nbsp;&nbsp;";
                    echo "<input id ='new_check".$i."' class ='edit_check' type='checkbox' name ='edit_checkboxes' checked />&nbsp;&nbsp;&nbsp;";
                    echo "<a id ='".$i."' class ='delete_edit' style='text-decoration:none;' href='#'> Delete field </a><br><br>";

                } else {

                    echo "<input id ='edit_field".$i."' class ='edit_data' type ='text' size='40' name = edit_field_value[] value ='".$key."' />&nbsp;&nbsp;&nbsp;";
                    echo "<input id ='new_check".$i."' class ='edit_check' type='checkbox' name ='edit_checkboxes' />&nbsp;&nbsp;&nbsp;";
                    echo "<a id ='".$i."' class ='delete_edit' style='text-decoration:none;' href='#'> Delete field </a><br><br>";
                }
                $i++;
            }
            echo '<input id ="edit_fields_submit"  type ="submit" name ="edit_fields_submit" class="button" value ="Save Settings" /><br><br>';
            echo '</form>'; 
        }
        echo '</div>';
        echo '<div id="project-setting-results"></div><div class="clear"></div>';
        echo '</div><!-- end fragment-6 -->';
    }

    ?>

最佳答案

您正尝试在创建元素之前绑定(bind)选择器。您在找什么 .live()它将监听器附加到父元素,并在触发事件时查找与选择器匹配的对象上的事件。我发现您正在使用 jQuery 1.6.2,因此您也可以查看 delegate 。如果您使用委托(delegate),您的代码可能如下所示(您将需要切换回类选择器以干净地支持多个元素):

$("#add_edit").delegate("a.new_delete_edit", "click", function(event) {
  alert("clicked !!!");
  event.preventDefault();
  alert("Was preventDefault() called: " + event.isDefaultPrevented());
  $(this).hide();
});

如果这确实有效,那么很难遵循您的代码,但想法是将监听器附加到 "#add_edit" 然后作为新的 a.new_delete_edit添加,如果在其中一个上触发单击事件,它将冒泡到此监听器,在此代码将被触发。

关于javascript - Jquery 链接选择器由于某种原因无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17756291/

相关文章:

javascript - 为 mvc 绑定(bind)展平复杂的 json 对象

javascript - Flask:提交表单时为什么不调用 AJAX?

javascript - (原因 : CORS header ‘Access-Control-Allow-Origin’ missing)

javascript - 如何使用单个 JS 事件更新多个 TD 标签的内容?

jquery - jQuery html() 内部的 HTML 实体

javascript - 如何在 JavaScript 中将元素插入嵌套数组?

javascript - 使用 Function() 构造函数作为闭包

javascript - 使用 jQuery 单击功能切换两个 PHP 文件

javascript - Parse.com javascript 登录

javascript - html中如何让页面从链接跳转?