【问题标题】:php ajax checkbox always checkedphp ajax 复选框总是选中
【发布时间】:2017-01-10 18:59:48
【问题描述】:

我有一个表单可以根据收到/检查的数据显示报价。

这是一个非刷新页面,所以它使用ajax获取提交点击,然后将数据发送到php文件。

主要问题是复选框总是被选中,并且正在回显“ON”。我需要复选框正常工作,默认情况下未选中,然后当用户单击它并提交表单时,它们实际上会被选中。

这些是复选框

<div class="checkbox">
        <label><input type="checkbox" name="lighting" id="lighting"><font color="#2C3E50" value="">Lighting</label></font>
        <label><input type="checkbox" name="heating" id="heating"><font color="#2C3E50" value="">Heating</label></font>
        <label><input type="checkbox" name="dancefloor" id="dancefloor"><font color="#2C3E50" value="">Dancefloor</label></font>
        <label><input type="checkbox" name="internaldressing" id="internaldressing" value=""><font color="#2C3E50">Internal Dressing</label></font>
    </div>

我尝试删除 value 属性,我尝试添加 check 属性。从字面上看,没有任何帮助。

这是 AJAX 文件的一部分:

    var dataString = 'eventtype=' + eventtype + '&peoplecount=' + peoplecount + '&location=' + location + '&eventdate=' + eventDate + '&lighting=' + lighting + '&heating=' + heating + '&dancefloor=' + dancefloor + '&internaldressing=' + internaldressing;


    $.ajax({  
    type: 'POST',  
    url: 'process.php',
    data: dataString,
    success: function(data) {
        if( data == '0' )
            alert( 'Błędne dane logowania!!!' );
        else
             $('#results').html(data);

    }  
}); 
        event.preventDefault();

然后我的 PHP 看起来像这样。

if(isset($_POST)){

        // Total price of quote. 
        $price = 0;
        // Prices of extras. 
        $lighting_price = 0;
        $heating_price = 0;
        $dancefloor_price = 0;
        $internaldressing_price = 0;

        // Stage I VARIABLES
        $eventType = $_POST['eventtype'];
        $peoplecount = (int)$_POST['peoplecount'];
        $location = $_POST['location'];
        $eventDate = $_POST['eventdate'];

        // Stage II VARIABLES 
        $lighting = $_POST['lighting'];
        $heating = $_POST['heating'];
        $dancefloor = $_POST['dancefloor'];
        $internaldressing = $_POST['internaldressing'];

        // If there are less than 70 guests then make base price 650. 
        if($peoplecount < 70){
            $price = $price + 650;
            $lighting_price = 75; 
            $heating_price = 150;
        }

        // If there are between 71 and 130 guests then make base price 950.
        if(($peoplecount >= 71) && ($peoplecount <= 130)){
            $price = $price + 950;
            $lighting_price = 150;
            $heating_price = 250;
        }

        if (isset($_POST['lighting'])){
            echo "IM TICKEED!!!!!!!";
        }

        if (isset($_POST['heating'])){
            echo "IM TICKEED!!!!!!!";

        }

        echo $eventType . "<br>";
        echo $peoplecount . "<br>";
        echo $lighting . "<br>";
        echo $heating . "<br><br>";
        echo $price;

        }

感谢您的帮助。

【问题讨论】:

  • 复选框是 ?
  • 编辑主帖以添加复选框。
  • 而不是 if (isset($_POST['lighting'])){ 试试 if (!empty($_POST['lighting'])){
  • 你能告诉我们$_POST在那些与复选框相关的变量上的内容吗?
  • 我试过做 !empty ,但也没有用。 @devlincarnate 你是什么意思内容? html 部分,php 和 js 这就是我所拥有的。当 $_POST 在 php 中时,它们会回显为“ON”。

标签: php jquery ajax checkbox


【解决方案1】:

第一件事。请在您的复选框中添加值属性。它们将作为值传递给您的 url。

请检查复选框是否被选中。尝试把选中的伪选择器。

$('#lighting:checked').val()

如果未选中该复选框,则它会给您未定义的值,因此请在分配值时检查该条件。

 var lighting = ($('#lighting:checked').val() === undefined )? null : $('#lighting:checked').val(); 

上面的行不会对代码产生太大影响,但有东西是件好事。

在将它分配给您的数据字符串变量时,您可以检查它是否为空或未定义,然后像这样附加字符串。如果变量有一个值,则将其附加到您将作为 ajax url 传递的数据字符串变量中。

希望这能解决您的问题。

【讨论】:

  • 谢谢,我用这个 if($_POST['variable'] == "null") 来检查该信息是否已被检查并且它正在以这种方式工作,所以我选择了你的回答。我只是想知道使用这种方法有什么缺点吗?
  • 其实我认为你不应该这样设置那个条件。如果未选中复选框,则不应将其附加到 url。您可以根据选中的复选框创建数据 url。然后在 url 上发送您的请求。未选中的复选框不会传递给您请求的 url,您可以使用 empty() 或 isset() 来检查值...如果您没有得到我所说的并希望详细说明我的答案,我可以这样做给你看。 ^_^
  • 啊,好吧,抱歉,我再次阅读了您的评论,现在我明白了,所以基本上如果他们返回 null 然后根本不要将它们包含在 dataString 中,如果它们被选中则包含它们。我只是想知道我该怎么做,我在 js 方面不太好,我是 php 的初学者
  • @JugaIK 确实如此,非常感谢。我为每个变量做了一个简单的 if 语句,它可以工作。在循环中这样做可能会更有效?嗯
  • 好吧。为此,为要为其分配值的每个复选框分配相同的类。然后使用 $.each() 进行赋值。您可能需要相应地调整您的值,因为您希望此处的 url 键是动态的。您可以分配一个数据属性来确定哪个复选框适用于哪个 url 键。像照明一样,您可以执行 value='1' data-name='lighting' 之类的操作,并在 $.each 循环中 get data('name') 以获取要分配的值。
【解决方案2】:

在javascript ajax语法中,将此代码放在ajax请求成功函数中

document.getElementById('lighting').checked = false;

通过更改 id 名称对其他复选框执行此操作

【讨论】:

  • 我已经尝试循环所有输入类型复选框并将它们设为假,不幸的是这也不起作用。
  • 有时你写在 标签中的 javascript 代码。不要那样做。您应该在最多
猜你喜欢
  • 1970-01-01
  • 2012-08-26
  • 1970-01-01
  • 2018-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-26
  • 1970-01-01
相关资源
最近更新 更多