日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

(59) 解决在列表视图复制导致打开详细内容

發(fā)布時(shí)間:2024/4/14 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 (59) 解决在列表视图复制导致打开详细内容 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

現(xiàn)象:
在列表視圖中,當(dāng)你要復(fù)制一個(gè)內(nèi)容,就觸發(fā)click事件,就打開(kāi)form視圖了
為了區(qū)分click mousedown mousemove muuseup 事件,從而放棄click事件
用后面那幾個(gè)事件組合來(lái)解決是要打開(kāi),還是復(fù)制內(nèi)容事件

改動(dòng)代碼如下:
\addons\web\static\src\js\view_list.js

var hasMove =false;
??????? this.$current = $('<tbody>')
??????????? .delegate('input[readonly=readonly]', 'click', function (e) {
??????????????? /*
??????????????????? Against all logic and sense, as of right now @readonly
??????????????????? apparently does nothing on checkbox and radio inputs, so
??????????????????? the trick of using @readonly to have, well, readonly
??????????????????? checkboxes (which still let clicks go through) does not
??????????????????? work out of the box. We *still* need to preventDefault()
??????????????????? on the event, otherwise the checkbox's state *will* toggle
??????????????????? on click
???????????????? */
??????????????? e.preventDefault();
??????????? })
??????????? .delegate('th.oe_list_record_selector', 'click', function (e) {
??????????????? e.stopPropagation();
??????????????? var selection = self.get_selection();
??????????????? var checked = $(e.currentTarget).find('input').prop('checked');
??????????????? $(self).trigger(
??????????????????????? 'selected', [selection.ids, selection.records, ! checked]);
??????????? })
??????????? .delegate('td.oe_list_record_delete button', 'click', function (e) {
??????????????? e.stopPropagation();
??????????????? var $row = $(e.target).closest('tr');
??????????????? $(self).trigger('deleted', [[self.row_id($row)]]);
??????????? })
??????????? .delegate('td.oe_list_field_cell button', 'click', function (e) {
??????????????? e.stopPropagation();
??????????????? var $target = $(e.currentTarget),
????????????????????? field = $target.closest('td').data('field'),
?????????????????????? $row = $target.closest('tr'),
????????????????? record_id = self.row_id($row);
???????????????
??????????????? if ($target.attr('disabled')) {
??????????????????? return;
??????????????? }
??????????????? $target.attr('disabled', 'disabled');

??????????????? // note: $.data converts data to number if it's composed only
??????????????? // of digits, nice when storing actual numbers, not nice when
??????????????? // storing strings composed only of digits. Force the action
??????????????? // name to be a string
??????????????? $(self).trigger('action', [field.toString(), record_id, function (id) {
??????????????????? $target.removeAttr('disabled');
??????????????????? return self.reload_record(self.records.get(id));
??????????????? }]);
??????????? })
??????????? .delegate('a', 'click', function (e) {
??????????????? e.stopPropagation();
??????????? })
?????????? .delegate('tr', 'mousedown', function (e) {

??????????????? if (e.button ==0){
?????????????????? hasMove=false;
??????????????? }else {
?????????????????? hasMove=true;
??????????????? }

??????????? })

??????????? .delegate('tr', 'mousemove', function (e) {

??????????????? hasMove=true;
??????????? })

??????????? .delegate('tr', 'mouseup', function (e) {

??????????????? if (hasMove || (e.srcElement.type && e.srcElement.type=='checkbox')){

??????????????? }else{
??????????????? var row_id = self.row_id(e.currentTarget);
??????????????? if (row_id) {
??????????????????? e.stopPropagation();
??????????????????? if (!self.dataset.select_id(row_id)) {
??????????????????????? throw new Error(_t("Could not find id in dataset"));
??????????????????? }
??????????????????? self.row_clicked(e);
??????????????? }
??????????????? }
??????????????? hasMove =false;
??????????? });

====================================
上面是一種解決方案,但當(dāng)ommousemove 事件,移動(dòng)鼠標(biāo)觸發(fā)事件過(guò)多,導(dǎo)致客戶(hù)端會(huì)死掉,最終用下面的方法
得到較好的解決
當(dāng)鼠標(biāo)移動(dòng)時(shí),有復(fù)制到內(nèi)容,則不進(jìn)入詳細(xì)面,判斷沒(méi)有內(nèi)容來(lái)決定:

\addons\web\static\src\js\view_list.js

.delegate('tr', 'click', function (e) {

??????????????? var txt = window.getSelection?window.getSelection():document.selection.createRange().text;
??????????????? if (txt!=''){
????????????????? e.stopPropagation();

??????????????? }else{

??????????????????? var row_id = self.row_id(e.currentTarget);
??????????????????? if (row_id) {
??????????????????????? e.stopPropagation();
??????????????????????? if (!self.dataset.select_id(row_id)) {
??????????????????????????? throw new Error(_t("Could not find id in dataset"));
??????????????????????? }
??????????????????????? self.row_clicked(e);
??????????????????? }
??????????????? }


??????????? });

轉(zhuǎn)載于:https://www.cnblogs.com/toby2chen/p/8177267.html

超強(qiáng)干貨來(lái)襲 云風(fēng)專(zhuān)訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生

總結(jié)

以上是生活随笔為你收集整理的(59) 解决在列表视图复制导致打开详细内容的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。