jQuery中$(this).attr('id')返回空值,Framework7传参异常
问题解决指南
咱们一步步拆解你遇到的问题,逐个修复:
1. 核心问题:PHP未输出ID值
你写的HTML链接里,PHP部分只是引用了$res['id']变量,但没有输出它,这直接导致id属性是空字符串!修改成下面这样,确保PHP把变量值渲染到HTML里:
<a href="#" id="<?php echo $res['id'];?>" class='bid_accept'>Accept</a>
(如果你的PHP环境支持短标签,也可以用更简洁的<?= $res['id'];?>,效果完全一样)
2. 选择器混用导致获取失败
Framework7内置的DOM操作库是Dom7,用$$作为别名,而你代码里用了$(this)——如果没引入jQuery,这个$根本不存在;就算引入了,也很可能和Dom7的作用域冲突。统一用Framework7的$$来获取元素属性:
$$('.bid_accept').on('click', function (e) { e.preventDefault(); // 把$(this)替换成$$(this) var value = $$(this).attr('id'); var jsonstring = JSON.stringify(value); myApp.confirm('Are you sure?', 'Custom Title', function () { // 注意:confirm的回调不需要传jsonstring参数,直接用外部的value就行 myApp.alert('Your ID is "' + value + '". You clicked Ok button'); }, function () { myApp.alert('You clicked Cancel button'); }); });
我顺便帮你修正了confirm回调里的参数问题——原来的jsonstring参数是多余的,因为回调函数本身不需要接收这个变量,直接用外部定义的value就可以。
额外的动态内容检查
如果你的这个链接是动态加载的(比如通过Framework7的路由异步加载的页面内容),直接绑定click事件可能会失效,因为元素还没渲染到页面上。这时候需要用事件委托的方式绑定:
$$(document).on('click', '.bid_accept', function (e) { e.preventDefault(); var value = $$(this).attr('id'); // 后续的确认弹窗代码和上面一致 });
最后别忘了验证$res['id']本身是否有有效值——可以在PHP里临时加一句var_dump($res['id']);看看输出,确保这个变量不是空的。
内容的提问来源于stack exchange,提问作者Pamela
相关产品推荐
相关产品推荐

