【问题标题】:Javascript click event not working in Google Chrome?Javascript 点击事件在 Google Chrome 中不起作用?
【发布时间】:2023-04-01 07:50:02
【问题描述】:

我有一个搜索功能,用户可以在其中选择日期范围和搜索框(如果需要),并将查询结果动态加载到 HTML div 元素中。显示结果时,有一个选择框可以选择要排序的字段。当用户选择一个字段时,它会触发另一个 AJAX 请求,该请求再次将页面“动态地重新加载”到 div 元素中,并按所选字段对结果进行排序。我目前使用的方法在 Mozilla Firefox 下运行良好,但在 Google Chrome 下无法运行。

这里是处理AJAX请求的JS文件:

/*========================================================
    sendServiceRequest.js: handles ajax request for
    dynamically loading data
*/
function sendServiceRequest(file, nvpSendData, successCallback, failCallback) {
    $.ajax({
        type: "POST",
        url: file,
        data: nvpSendData,
        dataType: 'html'
    }).success(function(data, status) {
        console.log(".done");
        console.log("Return AJAX status: " + status);
        //console.log("success data: " + JSON.stringify(data));
        successCallback(data, status);
    }).fail(function(data, status, error) {
        console.log(".fail");
        console.log("Return AJAX status: " + status);
        //console.log("Return data: " + JSON.stringify(data));
        failCallback(data, status, error);
    });
}


function sendSortServiceRequest(searchType, fromDate, toDate, searchString, column, order) {
    sendServiceRequest(
        "/search/get_content.php",
        {action:"sort", search_type:searchType, from_date:fromDate, to_date:toDate, search_str:searchString, col:column, order:order},
        function(data, status) {
            $('#results-container').html(data);
        },
        function(data, status, error) {
          console.log(".fail");
          console.log("Return AJAX status: "+status);
        }
    );
}

第一个函数 sendServiceRequest() 是最初将搜索结果加载到 div 元素中的函数。

下面是动态加载到 div 元素中的代码片段,div 元素是在单击选项时触发事件的选择元素:

<div class="col-sm-9" align="right">
                <label for="charge_auth_sort_select">Sort By:</label>
            </div>
            <div class="col-sm-3" style="padding:0;margin:0;">
                <select class="sort_select" id="charge_auth_sort_select" style="width:100%; padding:0; margin:0;">
                <!-- selection options with datasets for identifying column and order for sorting -->
                    <option onClick="sendSortServiceRequest('charge-auth', '<?php echo $fromDate; ?>', '<?php echo $toDate; ?>', '<?php echo $searchString; ?>', 0, '<?php echo $sortArgs[0]['order']; ?>')">
                        Status
                    </option>
                    <option onClick="sendSortServiceRequest('charge-auth', '<?php echo $fromDate; ?>', '<?php echo $toDate; ?>', '<?php echo $searchString; ?>', 1, '<?php echo $sortArgs[1]['order']; ?>')">
                        Order ID
                    </option>
                    <option onClick="sendSortServiceRequest('charge-auth', '<?php echo $fromDate; ?>', '<?php echo $toDate; ?>', '<?php echo $searchString; ?>', 2, '<?php echo $sortArgs[2]['order']; ?>')">
                        User ID
                    </option>
                    <option onClick="sendSortServiceRequest('charge-auth', '<?php echo $fromDate; ?>', '<?php echo $toDate; ?>', '<?php echo $searchString; ?>', 3, '<?php echo $sortArgs[3]['order']; ?>')">
                        Order Date
                    </option
                    <option onClick="sendSortServiceRequest('charge-auth', '<?php echo $fromDate; ?>', '<?php echo $toDate; ?>', '<?php echo $searchString; ?>', 4, '<?php echo $sortArgs[4]['order']; ?>')">
                        Last Updated
                    </option>
                    <option onClick="sendSortServiceRequest('charge-auth', '<?php echo $fromDate; ?>', '<?php echo $toDate; ?>', '<?php echo $searchString; ?>', 5, '<?php echo $sortArgs[5]['order']; ?>')">
                        Insurance Type
                    </option>
                    <option onClick="sendSortServiceRequest('charge-auth', '<?php echo $fromDate; ?>', '<?php echo $toDate; ?>', '<?php echo $searchString; ?>', 6, '<?php echo $sortArgs[6]['order']; ?>')">
                        Delivery Method
                    </option>
                </select>
            </div>

因此,在结果加载到“父”页面的 div 元素后,用户可以从选择列表中选择一个字段选项。当用户单击该选项时,它应该触发 sendSortServiceRequest() 函数,将结果重新加载到元素中,并按所选字段排序。

同样,这在 Firefox 下工作得很好,但不想在 Chrome 下工作。我已经坚持了很长一段时间了。任何帮助将不胜感激。

【问题讨论】:

  • 可能会更容易减少这个“错误”,让前端的东西歇斯底里,把剩下的东西都去掉;)
  • 如果您使用的是 jQuery,请将标签添加到您的问题中。另外,发布呈现的 HTML,而不是 PHP。
  • 对于神摇使用循环而不是那几个 if
  • “不想工作”是什么意思? Chrome 中实际发生了什么?控制台有错误吗?
  • 只使用这个而不是硬写那些选项&lt;?PHP for($i=0;i&lt;=6;i++){ ?&gt; &lt;option &lt;?php ($col == $i) ? printf("selected") : printf(""); ?&gt; onClick="sendSortServiceRequest('charge-auth', '&lt;?php echo $fromDate; ?&gt;', '&lt;?php echo $toDate; ?&gt;', '&lt;?php echo $searchString; ?&gt;', $i, '&lt;?php echo $sortArgs[$i]['order']; ?&gt;')"&gt; Status &lt;/option&gt; &lt;?php } ?&gt;

标签: javascript jquery


【解决方案1】:

我改变了处理点击事件的方式,并且它起作用了。我在父页面中使用 jquery click 事件,而不是动态加载元素上的“onclick”方法。

$('#results-container').on('change', '.fieldsort', function() {
    var opt = $('.fieldsort :selected');
    sendServiceRequest(
            '/search/get_content.php',
            {action:opt.attr('data-action'), search_type:opt.attr('data-searchtype'), from_date:opt.attr('data-fromdate'), to_date:opt.attr('data-todate'), search_str:opt.attr('data-searchstr'), col:opt.val(), order:opt.attr('data-order')},
            function (data, status) {
                $('#results-container').html(data);
            },
            function (data, status, error) {
                console.log('.fail');
                console.log('Return AJAX status: '+status);
            }
    );
});

此外,选择选项上的点击事件似乎在谷歌浏览器中不起作用。至少我根本无法让他们工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    相关资源
    最近更新 更多