编程语言
首页 > 编程语言> > javascript – event.preventDefault()不起作用

javascript – event.preventDefault()不起作用

作者:互联网

我使用Telerik Grid在我的视图中有这行代码:

      columns.Bound(o => o.URI).Width(10).Sortable(false)
                .ClientTemplate("<A class='btnGrid' id=source<#= ID #> onclick=GridSelection.addItem('<#= ID #>') >Add</A>").Title("").Width(50);

GridSelection addItem和disableSelected函数的JS代码:

  GridSelection = {
      addItem: function (value) {

         var anchorOption = $("a[id=source" + value + "]");

         anchorOption.click(function (e) { // variable name changed from "event"
               e.preventDefault();
               return false;    // as suggested by mr. Hamdi
               });

         anchorOption.fadeTo("slow", .5);

         GridSelection.disableSelected(anchorOption, true);

         var data = $("#GridSource").data('tGrid').data;
         var selectedObject;
         for (var item in data) {
            if (data[item].ID == value) {
               selectedObject = data[item];
               break;
            }
         }

          var grid = $("#GridSelected").data('tGrid');
          var newData = $("#GridSelected").data('tGrid').dataSource._data;
          newData.push(selectedObject);
          grid.dataBind(newData);
          grid.sort("");
          anchorOption.fadeTo("slow", .5);
      },

      disableSelected: function (element, disable) {
              //false on IEs 6, 7 and 8
              if (!$.support.leadingWhitespace) {
                  if (disable) {
                      $(element).attr('disabled', 'disabled');
                  } else {
                      $(element).removeAttr('disabled');
                  }
              }
     },
         // other GridSelection subfunctions here...

当我在IE中运行MVC3 Web应用程序时,由于GridSelection.disableSelected函数,它运行良好,但在Chrome和Mozilla Firefox中,event.preventDefault();不起作用.即使用户已将数据项添加到那里,锚链接仍会添加数据项.

是否可以在GridSelection.addItem函数中使用preventDefault方法?

preventDefault正在阻止哪个属性,它是href还是onclick?

这有什么问题?
我该如何解决这个错误?
有谁可以提供帮助?

解决方法:

链接的标记有一个内联点击处理程序,没有href:

<A class='btnGrid' id=source<#= ID #> onclick=GridSelection.verify('<#= ID #>') >Add</A>

如果你试图阻止GridSelection.verify(),你应该注意:

>可能在您的其他事件处理程序之前调用内联单击处理程序,这意味着从其他处理程序中取消它是为时已晚,并且无论如何
> e.preventDefault()不会阻止其他处理程序运行,它会停止事件的默认操作,链接将导航到href属性中指定的URL.而且你没有指定一个href.

如果你想在同一个元素上为同一个事件设置多个处理程序,你应该按照你希望它们被调用的顺序为它们全部分配jQuery,然后如果你想要停止其余的处理程序,请在其中一个处理程序中使用event.stopImmediatePropagation() method.他们从跑步.

我不知道如果你没有展示你想要防止的部分代码,你在所展示的代码中如何适应它,但一般原则是:

<a id="myLink" href="someURL">My link</a>

<script>
$("#myLink").click(function(e) {
    // some processing
    if (someCondition)
       e.stopImmediatePropagation();
    // some other processing
});

$("#myLink").click(function(e) {
    // some processing
});
</script>

说了这么多,如果.verify()函数调用你的.addItem()函数,并且你打算防止将来的点击事件在同一个链接上工作,因为第一次点击应该验证/添加然后你不想要为了能够再次添加,然后在.addItem()函数中执行以下操作:

anchorOption.removeAttr("onclick");
// or
anchorOption[0].onclick = null;

标签:telerik-grid,javascript,jquery,asp-net-mvc-3,preventdefault
来源: https://codeday.me/bug/20190726/1539854.html