使用下拉列表更新表值而不使用提交按钮

Posted

技术标签:

【中文标题】使用下拉列表更新表值而不使用提交按钮【英文标题】:Updating table values using dropdown without using a submit button 【发布时间】:2018-07-27 13:02:41 【问题描述】:

我正在尝试使用下拉列表而不使用提交按钮来更新数据库。

这是我的下拉菜单:

<td>
  <label for=""></label> 
  <select style="font-family: Questrial;" name="status" required>
	  <option disabled selected hidden>Select Status</option>
	  <option value="In Progress">In Progress</option>
	  <option value="Closed: Cancelled">Closed: Cancelled</option>
	  <option value="Closed: Solved">Closed: Solved</option>
	</select>
</td>

这是脚本:

<script>
  $(document).ready(function() 
    $('option[name="status"]').click(function() 
      var status = $(this).val();
      $.ajax(
        url: "update2.php",
        method: "POST",
        data: 
          status: status
        ,
        success: function(data) 
          $('#result').html(data);
        
      );
    );
  ); 
</script>

这里是 update2.php:

<?php
//Insert Data
	$hostname = "localhost";
	$username = "root";
	$password = "";
	$databasename = "companydb";
	
	try
	
		$conn = new PDO("mysql:host=$hostname;dbname=$databasename",$username, $password);
		$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
		
	if(isset($_POST["status"]))
	
		$query = "INSERT INTO tickets(status) VALUES (:status)";
		$statement = $conn->prepare($query);
		$statement->execute(
	array('status' => $_POST["status"])
	);
	
	$count = $statement->rowCount();
	if($count > 0)
	
		echo "Data Inserted Successfully..!";
	
		else
	
		echo "Data Insertion Failed";
	
	


	catch(PDOException $error)
	
		echo $error->getMessage();
	
?>

基本上,我希望在从下拉列表中进行选择时更新表值。

目前,当我进行选择时,没有任何反应。 (没有页面重新加载,没有错误信息,什么都没有)

我在这里做错了吗?

这也是我的表架构:

table schema

【问题讨论】:

select[name="status"] option替换option[name="status"] 您可能还应该听change 事件而不是点击事件,以避免运行不必要的代码和发出不必要的请求。 @jeroen 您没有不必要的请求,请收听选项的点击。但无论如何最好(通常完成)选择更改事件。 您能否在您的点击监听函数的最开始时发出警报alert("clickListener works!"); 并查看警报是否显示? @Cashbee 是的,我收到了警报。 【参考方案1】:

您定位到了错误的元素 $('option[name="status"]') 应该是 $('select[name="status"] option'

我建议你使用id,它们更清晰,更快。

此外,您还会对 change 事件感兴趣

https://api.jquery.com/change/

【讨论】:

使用您的代码,它会监听对选择本身的点击。我可以建议将$('select[name="status"]') 更改为$('select[name="status"] option')。 (但是当使用 change 事件时,听选择,而不是选项。) 感谢您的建议。 @Cashbee 我应该使用$('select[name="status"] option')吗? @JohnZ 是的尝试一下,但我担心它不会起作用。它与您在另一条评论中所说的$('select[name="status"]').change(..) 基本相同,它不起作用。不过,尝试一下永远不会错。 @Cashbee 是的,它没有用,谢谢你的建议【参考方案2】:

选择器应为select,事件应为change()。试试这个:

$('select[name="status"]').change(function() 

而不是:

$('option[name="status"]').click(function() 

【讨论】:

嗯,我确实试过这个,但我仍然得到相同的结果,谢谢你指出这一点。 @JohnZ 控制台的网络面板发生了什么?任何痕迹,任何错误? 没什么。下拉列表的值只是改变了,就是这样。 @JohnZ 你能在var status = $(this).val(); 后面加上console.log(status);alert(status) 吗? @JohnZ 我猜你还有另一个 javascript 错误。控制台没有错误 (F12) ?【参考方案3】:

1) 将$('option[name="status"]').click( 更改为$('select[name="status"]').change( 名称“状态”是选择的属性,而不是选项。

2) 确保您有一个 id 为“result”的元素,否则 ajax 成功处理程序将不会在任何地方插入接收到的数据/字符串。

这些更改应该可以使您的代码正常工作。

我建议为您执行的每个 ajax 调用添加一个错误处理程序。还要尝试防止 ajax 方法调用的 php 文件出现没有返回/回显的情况。

if(isset($_POST["status"]))

    $query = "INSERT INTO tickets(status) VALUES (:status)";
    $statement = $conn->prepare($query);
    $statement->execute(array('status' => $_POST["status"]));

    $count = $statement->rowCount();
    if($count > 0)
    
        echo "Data Inserted Successfully..!";
    
        else
    
        echo "Data Insertion Failed";
    

// ! add else statement
else

    echo "unknown index: 'status'";

还有一篇关于 ajax 错误处理的有趣文章:setting response codes in PHP

【讨论】:

非常感谢!

以上是关于使用下拉列表更新表值而不使用提交按钮的主要内容,如果未能解决你的问题,请参考以下文章

Ajax 在按钮提交上更改链接的类名

下拉列表和一些按钮

如何在下拉列表中获取除隐藏和提交按钮之外的所有表单字段

我无法使用 jQuery 发布特定行并获取字段的值,我获取第一行的值而不是提交的行

提交时无法获取引导下拉列表的值

将值从第一个下拉列表提交到第二个下拉列表而不重新加载页面