javascript - type - submit form jquery




كيفية منع الأزرار من تقديم النماذج (10)

اضبط الزر الخاص بك بالطريقة العادية واستخدم event.preventDefault مثل ..

   <button onclick="myFunc(e)"> Remove </button>  
   ...
   ...

   In function...

   function myFunc(e){
       e.preventDefault();
   }

في الصفحة التالية ، مع زر Firefox ، يقوم زر الإزالة بإرسال النموذج ، ولكن لا يعمل زر الإضافة. كيف أمنع زر الإزالة من إرسال النموذج؟

<html>
<head>
<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<script type="text/javascript">
function addItem() {
  var v = $('form :hidden:last').attr('name');
  var n = /(.*)input/.exec(v);
  var newPrefix;
  if ( n[1].length == 0 ) {
    newPrefix = '1';
  } else {
    newPrefix = parseInt(n[1])+1;
  }
  var oldElem = $('form tr:last');
  var newElem = oldElem.clone(true);
  var lastHidden = $('form :hidden:last');
  lastHidden.val(newPrefix);
  var pat = '=\"'+n[1]+'input';
  newElem.html(newElem.html().replace(new RegExp(pat, 'g'), '=\"'+newPrefix+'input'));
  newElem.appendTo('table');
  $('form :hidden:last').val('');
}
function removeItem() {
  var rows = $('form tr');
  if ( rows.length > 2 ) {
    rows[rows.length-1].html('');
    $('form :hidden:last').val('');
  } else {
    alert('Cannot remove any more rows');
  }
}
</script>
</head>
<body>
<form autocomplete="off" method="post" action="">
<p>Title:<input type="text" /></p>
<button onclick="addItem(); return false;">Add Item</button>
<button onclick="removeItem(); return false;">Remove Last Item</button>
<table>
<th>Name</th>

<tr>
  <td><input type="text" id="input1" name="input1" /></td>
  <td><input type="hidden" id="input2" name="input2" /></td>
</tr>
</table>
<input id="submit" type="submit" name="submit" value="Submit">
</form>
</body>
</html>

أنا متأكد من أن FF على

removeItem 

وظيفة تواجه خطأ جافا سكريبت ، وهذا لن يحدث على IE

عندما يظهر خطأ javascript لن يتم تشغيل رمز "return false" ، مما يجعل الصفحة للإعادة


أوافق على Shog9 ، على الرغم من أنني قد أستخدم بدلاً من ذلك:

<input type = "button" onClick="addItem(); return false;" value="Add Item" />

وفقًا لـ w3schools ، فإن علامة <button> لها سلوك مختلف على متصفحات مختلفة.


تحتوي الدالة removeItem فعليًا على خطأ ، مما يجعل زر النموذج يعمل بشكل افتراضي (إرسال النموذج). عادةً ما تعطي وحدة تحكم الخطأ في جافا سكريبت مؤشرًا في هذه الحالة.

تحقق من وظيفة removeItem في الجزء javascript:

الخط:

rows[rows.length-1].html('');

لا يعمل. جرب هذا بدلا من ذلك:

rows.eq(rows.length-1).html('');

قم بتعيين النوع على الأزرار الخاصة بك:

<button type="button" onclick="addItem(); return false;">Add Item</button>
<button type="button" onclick="removeItem(); return false;">Remove Last Item</button>

... التي ستحميهم من تشغيل إجراء إرسال عند حدوث استثناء في معالج الأحداث. ثم ، قم بإصلاح removeItem() بحيث لا يؤدي إلى تشغيل استثناء:

function removeItem() {
  var rows = $('form tr');
  if ( rows.length > 2 ) {
    // change: work on filtered jQuery object
    rows.filter(":last").html('');
    $('form :hidden:last').val('');
  } else {
    alert('Cannot remove any more rows');
  }
}

لاحظ التغيير: استخرج الكود الأصلي الخاص بك عنصر HTML من مجموعة jQuery ، ثم حاول استدعاء طريقة jQuery عليه - هذا رمى استثناء ، مما أدى إلى السلوك الافتراضي للزر.

FWIW ، هناك طريقة أخرى يمكن أن تذهب بها مع هذا ... اسحب معالجات الأحداث الخاصة بك باستخدام jQuery ، واستخدم الأسلوب preventDefault() على كائن event jQuery لإلغاء السلوك الافتراضي المُقدم:

$(function() // execute once the DOM has loaded
{

  // wire up Add Item button click event
  $("#AddItem").click(function(event)
  {
    event.preventDefault(); // cancel default behavior

    //... rest of add logic
  });

  // wire up Remove Last Item button click event
  $("RemoveLastItem").click(function(event)
  {
    event.preventDefault(); // cancel default behavior

    //... rest of remove last logic
  });

});

...

<button type="button" id="AddItem" name="AddItem">Add Item</button>
<button type="button" id="RemoveLastItem" name="RemoveLastItem">Remove Last Item</button>

تحافظ هذه التقنية على كل منطقك في مكان واحد ، مما يجعل تصحيحه أكثر سهولة ... كما يسمح لك بتنفيذ التراجع عن طريق تغيير type على الأزرار مرة أخرى submit ومعالجة جانب خادم الحدث - وهذا معروف وجافا سكريبت غير مزعجة .


لا يمكنني اختبار ذلك الآن ، ولكنني أعتقد أنه يمكنك استخدام طريقة preventDefault() jQuery في preventDefault() .


هذا خطأ في html5 كما قيل ، لا يزال بإمكانك استخدام الزر كإرسال (إذا كنت تريد تغطية كل من مستخدمي جافا سكريبت وغير جافا سكريبت) باستخدامه مثل:

     <button type="submit" onclick="return false"> Register </button>

وبهذه الطريقة ، ستقوم بإلغاء الإرسال ولكن ستفعل كل ما تقوم به في jquery أو javascript function وسيقوم بتقديمها للمستخدمين الذين ليس لديهم javascript.


وإليك طريقة بسيطة:

$('.mybutton').click(function(){

    /* Perform some button action ... */
    alert("I don't like it when you press my button!");

    /* Then, the most important part ... */
    return false;

});

$("form").submit(function () { return false; }); التي تمنع الزر من الإرسال أو يمكنك فقط تغيير نوع الزر إلى "زر" <input type="button"/> بدلاً من <input type="submit"/> التي لن تعمل إلا إذا كان هذا الزر ليس زر فقط في هذا النموذج.


return false;

يمكنك إرجاع false في نهاية الدالة أو بعد استدعاء الدالة.

وطالما أنه آخر شيء يحدث ، لن يتم إرسال النموذج.





submit