【问题标题】:Jquery live('change', function() wont trigger drop downJquery live('change', function() 不会触发下拉菜单
【发布时间】:2013-02-25 04:29:36
【问题描述】:

任何人都可以看出这段代码有什么问题吗?它连接到一个回显 Json 数据的 php 函数。我正在运行 Jquery 1.9.1。我相信问题出在 Jquery 脚本的末尾,但我找不到任何解决方案...

var formObject = {
   run : function(obj) {
        if (obj.val() === '') {
       obj.nextAll('.update').html('<option value="">----</option>').attr('disabled', true);
   } else {
       var id = obj.attr('id');
       var v = obj.val();
       jQuery.getJSON('func/blankett_func.php', { id : id, value : v }, function(data) {
            if (!data.error) {
                obj.next('.update').html(data.list).removeAttr('disabled');
            } else {
                obj.nextAll('.update').html('<option value="">----</option>').attr('disabled', true);
            }
        });
    }
}
  };
$(function() {

    $('.update').live('change', function() {
        formObject.run($(this));
    });

});

PHP 函数:

$id = $_GET['id'];
$value = $_GET['value'];

try {

    $objDb = new PDO('mysql:host=localhost;dbname=blankett', 'root', 'root');
    $objDb->exec('SET CHARACTER SET utf8');

    $sql = "SELECT * 
            FROM `region`
            WHERE `master_id` = ?";
    $statement = $objDb->prepare($sql);
    $statement->execute(array($value));
    $list = $statement->fetchAll(PDO::FETCH_ASSOC);

    if (!empty($list)) {

        $out = array('<option value="">Select one</option>');

        foreach($list as $row) {
            $out[] = '<option value="'.$row['id'].'">'.$row['region'].'</option>';
        }

        echo json_encode(array('error' => false, 'list' => implode('', $out)));

    } else {
        echo json_encode(array('error' => true));
    }

} catch(PDOException $e) {
    echo json_encode(array('error' => true));
}

    } else {
echo json_encode(array('error' => true));
  }

【问题讨论】:

  • 相当支持问题出在javascript中?
  • 只用javascript试试,没有任何动态代码
  • 为什么php语言的用户会误认MVC的存在?
  • 您检查控制台是否有错误?我相信live() 在 1.9.1 中已经过时,甚至可能被删除。应该是$(document).on('change', '.update', function() {。
  • live() 在 jQuery 1.9 中被移除。使用 on()

标签: php jquery mysql cascadingdropdown


【解决方案1】:

原代码的问题出在javascript的.live,应该改成.on

它没有触发的原因是 jQuery 改变了 API。 http://api.jquery.com/on/

新的 jQuery 脚本:

var formObject = {
run : function(obj) {
    if (obj.val() === '') {
        obj.nextAll('.update').html('<option value="">----</option>').attr('disabled', true);
    } else {
        var id = obj.attr('id');
        var v = obj.val();
        jQuery.getJSON('func/blankett_func.php', { id : id, value : v }, function(data) {
            if (!data.error) {
                obj.next('.update').html(data.list).removeAttr('disabled');
            } else {
                obj.nextAll('.update').html('<option value="">----</option>').attr('disabled', true);
            }
        });
    }
}
};
$(function() {

$('.update').on('change', function() {
    formObject.run($(this));
});

});

【讨论】:

  • 是的 @cspray 是对的,问题是 .live 被删除了,应该使用的是 .on
  • 有人可以顺便关闭这篇文章。
猜你喜欢
  • 1970-01-01
  • 2012-05-27
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 1970-01-01
  • 1970-01-01
  • 2017-04-30
  • 1970-01-01
相关资源
最近更新 更多